Laravel jwt身份验证令牌已过期
我正在为我的SPA使用jwt auth和vue auth。出于测试目的,我将vue auth的配置文件中的refreshData变量设置为1,以便每分钟刷新一次。对于jwt auth config文件,我将ttl设置为1,将refresh\u ttl设置为3 我可以登录并接收令牌。我在本地存储中看到它。在前3分钟内,我每分钟都会成功刷新一次,并且我看到本地存储中的令牌发生了更改,但第4次,我收到了一个错误Laravel jwt身份验证令牌已过期,laravel,vue.js,jwt,jwt-auth,Laravel,Vue.js,Jwt,Jwt Auth,我正在为我的SPA使用jwt auth和vue auth。出于测试目的,我将vue auth的配置文件中的refreshData变量设置为1,以便每分钟刷新一次。对于jwt auth config文件,我将ttl设置为1,将refresh\u ttl设置为3 我可以登录并接收令牌。我在本地存储中看到它。在前3分钟内,我每分钟都会成功刷新一次,并且我看到本地存储中的令牌发生了更改,但第4次,我收到了一个错误 {message: "Token has expired and can no longe
{message: "Token has expired and can no longer be refreshed",…}
exception: "Tymon\JWTAuth\Exceptions\TokenExpiredException"
为什么会这样?因为我正在刷新令牌,所以我认为刷新ttl根本不重要,但它似乎确实在命令这一点 在AuthController中尝试更改
$this->middleware('auth:api', ['except' => ['login']]);
进入
在auth controller刷新功能中,请更改:
return response()->json([
"success" => true,
"payload" => [
'access_token' => auth()->refresh(),
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60,
'user' => auth()->user()
]
]);
您需要更改config/auth.php,如下所示:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
'hash' => false,
],
],
如果您不想让config jwt.php replace中的token thn过期,这里有一个很好的例子
'ttl' => env('JWT_TTL', null),
'required_claims' => [
'iss',
'iat',
// 'exp',
'nbf',
'sub',
'jti',
],
然后击中
php artisan config:cache
您可以将ttl设置为null,以生成永不过期的令牌
'ttl' => env('JWT_TTL', null),
或者直接放弃.env您不能使用该软件包。您可以做的是将config/jwt.php文件中的过期时间设置为7天,这样,如果用户进行身份验证,令牌将在7天后过期
'ttl' => env('JWT_TTL', 60*24*7),
该值以分钟为单位
'ttl' => env('JWT_TTL', 60*24*7),