美文网首页
使用Laravel Passport做Api认证(二)——自定义

使用Laravel Passport做Api认证(二)——自定义

作者: CodingLady | 来源:发表于2020-04-09 11:31 被阅读0次

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

    上篇说到了可以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认证(二)——自定义

          本文链接:https://www.haomeiwen.com/subject/bkmtmhtx.html