Laravel/Vue - JWT 令牌记住我

Ret*_*rks 4 jwt laravel vue.js

我正在使用 Laravel 和 JWT 构建我的身份验证系统,但我有一些问题。

我使用tymon jwt包

  1. 我有一个登录时生成的令牌,有效期为 24 小时,如果选中“记住我”框,则该令牌的有效期为 2 年。除了我应该如何在这两年内更新令牌之外,出于安全原因,我想我不必保留相同的令牌?

  2. 我必须在数据库中存储一些东西吗?例如,像记住我令牌或刷新令牌?

我对这一切有点迷失,我想了解如何继续。我已经在互联网上搜索了很多,但找不到我想要的,或者它不完整。

public function login()
    {
        $credentials = request(['email', 'password']);
        $ttl = env('JWT_TTL');

        if (request(['remember_me']) == true) {
            $ttl = env('JWT_REMEMBER_TTL');
        }

        if (!$token = auth()->attempt($credentials)) {
            return response()->json(['error' => 'Wrong credentials'], 401);
        }

        return $this->respondWithToken($token, $ttl);
    }
Run Code Online (Sandbox Code Playgroud)
protected function respondWithToken($token, $ttl)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => $ttl
        ]);
    }
Run Code Online (Sandbox Code Playgroud)
JWT_TTL=1440
JWT_REMEMBER_TTL=1051200
Run Code Online (Sandbox Code Playgroud)

提前致谢,

小智 8

您不必在数据库中存储任何内容。

创建两个 JWT,一个作为访问令牌(登录),另一个用于记住我。像往常一样将访问令牌设置为 24 小时过期,并将记住我令牌设置为 2 年过期。

在受保护的路由上,检查访问令牌是否已过期,如果过期,请检查“记住我”令牌。如果存在记住我令牌,请颁发新的访问令牌。