jwt-auth令牌已过期

时间:2019-03-18 08:04:46

标签: laravel vue.js jwt jwt-auth

我正在为我的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甚至都没有关系,但这似乎是决定性的。

6 个答案:

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

该值以分钟为单位。