0

我正在为我的 SPA 使用 jwt-auth 和 vue-auth。出于测试目的,我将 vue-auth 的配置文件中的 refreshData 变量设置为 1,以便每分钟刷新一次。对于 jwt-auth 配置文件,我将 ttl 设置为 1,将 refresh_ttl 设置为 3。

我能够登录并接收令牌。我在本地存储中看到它。前 3 分钟的每一分钟,我都会成功刷新,我看到 localStorage 中的令牌发生变化,但第四次出现错误。

{message: "Token has expired and can no longer be refreshed",…}
exception: "Tymon\JWTAuth\Exceptions\TokenExpiredException"

为什么是这样?由于我正在刷新令牌,我认为 refresh_ttl 甚至都无关紧要,但它似乎确实在规定这一点。

4

6 回答 6

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),

希望它可以帮助其他人:)。

于 2021-07-11T09:24:00.013 回答
0

在你的 AuthController 尝试改变

$this->middleware('auth:api', ['except' => ['login']]);

进入

$this->middleware('auth:api', ['except' => ['login', 'refresh']]);
于 2019-03-18T08:13:10.047 回答
0

您可以将 ttl 设置为 null,以生成永不过期的令牌。

'ttl' => env('JWT_TTL', null),

或直接给出 .env

于 2019-03-18T12:20:04.157 回答
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,
    ],
],

这是一个很好的例子laravel-jwt-vuejs

于 2019-03-18T08:20:50.773 回答
0

如果您不想在配置 jwt.php 中使您的令牌过期,请替换

 'ttl' => env('JWT_TTL', null),


 'required_claims' => [
        'iss',
        'iat',
        // 'exp',
        'nbf',
        'sub',
        'jti',
    ],

然后打

php artisan config:cache
于 2019-03-18T09:14:13.367 回答
0

你不能使用那个包来做到这一点。您可以做的是将 config/jwt.php 文件中的过期时间设置为 7 天,这样如果用户进行身份验证,令牌将在 7 天后过期。

'ttl' => env('JWT_TTL', 60*24*7),

该值以分钟为单位。

于 2021-01-10T13:14:33.893 回答