当令牌过期时,Laravel护照会获得新的访问令牌

时间:2020-08-29 17:43:27

标签: laravel laravel-passport

我想在短时间内实施令牌。假设1天。我的路线也有auth:api中间件:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

编辑另一种方法

如果用户未通过身份验证,Laravel将抛出AuthenticationException

此异常由render中的Illuminate/Foundation/Exceptions/Handler.php方法处理,并将依次调用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');
}