【问题标题】:Laravel API token authentication vs web Route::prefix('api')Laravel API 令牌认证与 web Route::prefix('api')
【发布时间】:2020-08-18 04:50:33
【问题描述】:

我想知道使用带有令牌的 API 或带有前缀的网络路由器的更好做法是: 拥有一个每次用户登录时都会更改的令牌。API:

Route::get('userdata/{key}', 'userController@show');

Route::prefix('api')->group(function () {
Route::get('userdata', 'userController@show');
});

在网络路由器中,我可以使用 cookie 来验证用户。

这些哪个更好?

【问题讨论】:

    标签: php laravel api token


    【解决方案1】:

    将所有 api 路由分组并应用您的自定义中间件,该中间件将检查请求标头中的不记名令牌。操作方法如下:

    创建中间件:

    class AuthenticateWithToken
    {
        public function handle($request, Closure $next)
        {
            $token = $request->bearerToken();
            if ($token==='valid') {
                return $next($request);
            }
    
            throw new Exception();
        }
    }
    

    在 App\Http\Kernel.php 中注册您的中间件:

    class Kernel extends HttpKernel
    {
        protected $routeMiddleware = [
            'authenticateWithToken' => AuthenticateWithToken::class
        ];
    }
    

    在路由上应用中间件:

    Route::middleware('authenticateWithToken')
        ->prefix('api')
        ->group(function () {
            Route::get('/route1', 'YourController@action1');
            Route::get('/route2', 'YourController@action2');
        });
    

    【讨论】:

      【解决方案2】:

      您不需要在路由/正文中使用任何“键”或其他字段来获取登录/会话用户的数据。您可以为获取“自我数据”创建静态路由,并根据标头(承载或其他身份验证)或 cookie 获取当前用户数据。

      Route::get('userdata', 'userController@show');
      

      带有cookies/header 就可以了。另外不要忘记使用身份验证中间件,您应该在其中验证 cookie/header。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-27
        • 2019-05-01
        • 1970-01-01
        • 2020-05-12
        • 2019-01-09
        • 2014-02-10
        • 2013-02-25
        相关资源
        最近更新 更多