【问题标题】:Laravel passport get new access token when the token is expired令牌过期时,Laravel 护照获取新的访问令牌
【发布时间】:2020-12-18 08:16:58
【问题描述】:

我想实现短时间的token。假设 1 天。我的路由也有auth:api 中间件:

Route::middleware('auth:api')->post('auth/test', 'AuthController@test');

当令牌过期时,用户会从客户端注销(使用 401 响应代码)。从用户体验的角度来看,这不是一个好主意。我该如何处理?

注意:我已经在 CodeIgniter 中实现了这样的场景。我有一个有效期为 10 分钟的访问令牌和一个很长时间的刷新令牌(可能是一年)。我在数据库中有一个刷新令牌的引用。因此,在 10 分钟内,如果令牌有效,则无需接触数据库。如果过期,我会根据刷新令牌向用户返回一个新令牌。

【问题讨论】:

    标签: laravel laravel-passport


    【解决方案1】:

    一种方法是在路由上使用Middleware,该中间件将在应用程序处理请求后执行其任务。因此,在您的中间件中,您可以检查响应是否为 401(Unauthorize),如果是,则您可以从标头获取过期令牌并从过期令牌中重新生成新的访问令牌并将其返回给用户。

    编辑另一种方法

    如果用户没有进行身份验证,Laravel 会抛出一个AuthenticationException

    此异常由Illuminate/Foundation/Exceptions/Handler.php 中的render 方法处理,然后将调用unauthenticated() 方法,该方法在您的app/Exceptions/Handler.php 中定义:因此您可以在此方法中编写逻辑以生成新的来自过期的令牌,然后将其返回给用户,如

    protected function unauthenticated($request, AuthenticationException $exception)
    {
        // generate new token and return it to the user and redirect user to the 
        //intended route.
    
        return redirect()->intended('defaultpage');
    }
    

    【讨论】:

    • auth:api 中间件不允许我在路由上运行 After Middleware。
    • @VahidNajafi 我已经为另一种方法编辑了我的答案,希望它现在可以帮助你
    • 谢谢。现在我收到以下错误:Could not check compatibility between App\\Exceptions\\Handler::unauthenticated($request, App\\Exceptions\\AuthenticationException $exception) and Illuminate\\Foundation\\Exceptions\\Handler::unauthenticated($request, Illuminate\\Auth\\AuthenticationException $exception), because class App\\Exceptions\\AuthenticationException is not available
    • @VahidNajafi 在文件顶部添加use Illuminate\Auth\AuthenticationException
    • @VahidNajafi 请务必在namespace App\Exceptions; use Exception; use Request; use Illuminate\Auth\AuthenticationException; use Response; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;上方包含此内容@
    猜你喜欢
    • 2021-01-14
    • 2018-04-11
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2019-05-15
    • 2019-06-22
    • 2021-07-16
    • 2019-11-17
    相关资源
    最近更新 更多