使用Laravel Passport做Api认证(二)——自定义路由配置

!!!!转载请注明作者和本文链接!!!!

上篇说到了可以Passport自带路由,我们可以进行注册。但是我们却不想使用Passport自带的路由怎么办?

我们来看看Passport的注册路由函数

Passport::routes()

vendor/laravel/passport/src/Passport.php

    /**
     * Binds the Passport routes into the controller.
     *
     * @param  callable|null  $callback
     * @param  array  $options
     * @return void
     */
    public static function routes($callback = null, array $options = [])
    {
        $callback = $callback ?: function ($router) {
            $router->all();
        };

        $defaultOptions = [
            'prefix' => 'oauth',
            'namespace' => '\Laravel\Passport\Http\Controllers',
        ];

        $options = array_merge($defaultOptions, $options);

        Route::group($options, function ($router) use ($callback) {
            $callback(new RouteRegistrar($router));
        });
    }

我们可以看到这个函数有两个参数

第一个参数:callback

这个参数是个回调,看最后Route::group里面的代码,这个回调的定义类似如下这种

function(RouteRegistrar $router) {
    //...
}

而其中的RouteRegistrar,里面就提供了Passport路由具体的注册,具体的代码详情可以看vendor/laravel/passport/src/RouteRegistrar.php,里面也给出了授权,获取accesstoken等等一些系列接口,还能看到具体这些接口的方法,路由定义等等

第二个参数:options

       $defaultOptions = [
            'prefix' => 'oauth',
            'namespace' => '\Laravel\Passport\Http\Controllers',
        ];

这个Options是Route::group中使用的参数,其意义和Route::group中规定的是一样的,可以用来配置这组路由的中间件、命名空间、子域名、路由前缀等等。从Passport的代码来看,Passport会提供两个prefix和namespace两个默认设置。所以,我们可以通过修改Options来达到自定义配置的目的。
比如,我这个项目Api是有路由前缀的,那么就修改prefix,代码如下

//不带回调,默认注册Passport所有路由
Passport::routes(null,['prefix' => 'api/oauth']);

或者

//带回调,只想保留AccessToken相关路由
Passport::routes(function(RouteRegistrar $router) {
    $router->forAccessTokens();
},['prefix' => 'api/oauth']);

最后就会发现,本来是post http://host/oauth/token可以获取到access token,现在修改了前缀,需要post http://host/api/oauth/token才能获取到了

预告:下一篇会写如何自定义返回内容

!!!!转载请注明作者和本文链接!!!!

你可能感兴趣的:(使用Laravel Passport做Api认证(二)——自定义路由配置)