我正在为我的SPA使用jwt-auth和vue-auth。出于测试目的,我将vue-auth的配置文件中的refreshData变量设置为1,以便每分钟刷新一次。对于jwt-auth配置文件,我将ttl设置为1,将refresh_ttl设置为3。
我能够登录并收到令牌。我在localStorage中看到它。在最初的3分钟中,每分钟刷新一次都成功,并且我看到令牌在localStorage中发生了变化,但是第4次,我得到了一个错误。
{message: "Token has expired and can no longer be refreshed",…}
exception: "Tymon\JWTAuth\Exceptions\TokenExpiredException"
这是为什么?由于我正在刷新令牌,因此我认为refresh_ttl甚至都没有关系,但这似乎是决定性的。
答案 0 :(得分:1)
我遇到了同样的问题,我尝试了网上能找到的所有方法,但没有任何效果。于是自己研究了一下config/jwt.php文件,修改了这行文件解决了:
'refresh_ttl' => env ('JWT_REFRESH_TTL', 20160),
作者:
'refresh_ttl' => env ('JWT_REFRESH_TTL', Null),
之前,我也修改了这一行:
'ttl' => env ('JWT_TTL', 60),
作者:
'ttl' => env ('JWT_TTL', NULL),
希望它可以帮助其他人:) .
答案 1 :(得分:0)
在您的AuthController中尝试更改
$this->middleware('auth:api', ['except' => ['login']]);
进入
$this->middleware('auth:api', ['except' => ['login', 'refresh']]);
答案 2 :(得分:0)
在您的身份验证控制器刷新功能中,请进行以下更改:
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,
],
],
这是一个很好的例子BlobRange
答案 3 :(得分:0)
如果您不想使令牌thn在配置jwt.php替换中
'ttl' => env('JWT_TTL', null),
'required_claims' => [
'iss',
'iat',
// 'exp',
'nbf',
'sub',
'jti',
],
然后点击
php artisan config:cache
答案 4 :(得分:0)
您可以将ttl设置为null,以产生永不过期的令牌。
'ttl' => env('JWT_TTL', null),
或直接输入.env
答案 5 :(得分:0)
你不能用那个包来做到这一点。您可以做的是将 config/jwt.php 文件中的过期时间设置为 7 天,这样如果用户验证令牌将在 7 天后过期。
'ttl' => env('JWT_TTL', 60*24*7),
该值以分钟为单位。