我对 jwt 身份验证令牌到期有疑问。情况如下:
我有一个用 laravel 编写的 API 作为一个项目。此 API 使用另一个 laravel 项目(客户端)。但是当我尝试登录用户时,一切都很好,但后来我开始意识到在 TTL(60 分钟)(生存时间)过去之后,然后当我尝试获取用户资源时(这需要用户登录)我得到 json 错误响应 {"error" => "token_expired"}。
这是我使用 jwt.auth 中间件的代码的路由部分:
Route::group(['middleware' => 'jwt.auth'], function () {
Route::get('account/getUserDetails', 'Api\AccountController@getUserDetails');
});
我很困惑为什么令牌没有自动刷新,我是否需要明确指定某个地方来刷新令牌,我不这么认为?
jwt.php 中的 'refresh_ttl' => 20160。端点如下所示:
public function getUserDetails(Request $request)
{
try {
if (! $user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
$refreshed = JWTAuth::refresh(JWTAuth::getToken());
$user = JWTAuth::setToken($refreshed)->toUser();
return $this->response->withArray(['token' => $refreshed]);
} catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
return response()->json(['token_absent'], $e->getStatusCode());
}
return $user;
}