当令牌过期时,Laravel 护照会获取新的访问令牌
2020-08-29
2030
我想实现一个短时间的令牌。假设是 1 天。此外,我的路由有
auth:api
中间件:
Route::middleware('auth:api')->post('auth/test', 'AuthController@test');
当令牌过期时,用户将从客户端注销(带有 401 响应代码)。从 UX 的角度来看,这不是一个好主意。我该如何处理?
注意: 我已经在 CodeIgniter 中实现了这样的场景。我有一个有效期为 10 分钟的访问令牌和一个非常长的刷新令牌(可能一年)。我在数据库中有一个刷新令牌的引用。因此,在 10 分钟内,如果令牌有效,则无需触及数据库。如果它已过期,我会根据刷新令牌向用户返回一个新令牌。
1个回答
一种方法是在路由上使用 中间件 ,该中间件将在应用程序处理请求后执行其任务。因此,在您的中间件中,您可以检查响应是否为 401(未授权),如果是,那么您可以从标头中获取过期的令牌,并从过期的令牌中重新生成新的访问令牌并将其返回给用户。
编辑另一种方法
如果用户未进行身份验证,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');
}
Saddam
2020-08-29