在流明 jwt 令牌中设置过期时间

Posted

技术标签:

【中文标题】在流明 jwt 令牌中设置过期时间【英文标题】:Set expire time in lumen jwt token 【发布时间】:2016-08-08 12:13:22 【问题描述】:

我用 jwt 和 Lumen 创建了一个身份验证 api。

我在我的 Lumen 项目中使用 tymondesigns/jwt-auth 包进行身份验证。在用户登录的项目中,我想在 1 个月后使用户令牌过期。

现在我该如何解决?

【问题讨论】:

【参考方案1】:

我使用的是 Lumen 8.0 版本。我刚刚在 .env 文件中添加了以下行 24 小时,并在命令行中重新启动了项目,它就像魅力一样工作:

JWT_TTL=1440

注意:请不要忘记在命令行中重新启动项目。很高兴帮助并分享此代码。感谢您提出这个问题。

【讨论】:

【参考方案2】:

我正在使用Lumen (5.8.12) 我真正做的是在.env 文件中设置值这样

只需在您的.env 文件中添加JWT_TTL 的值。默认时间是60 分钟,我的值代表1440(60*24) 分钟或1 天

【讨论】:

【参考方案3】:

.env 中的最新(varsion >1.0.0) 流明JWT_TTL 将工作,因为他们在其内部代码中使用'ttl' => env('JWT_TTL', 60),。 参考:https://github.com/tymondesigns/jwt-auth/blob/develop/config/config.php

【讨论】:

【参考方案4】:

事实上,对我来说,当我在JWT::encode 处更改exp 参数时,它就起作用了。

在我的代码上,使用登录后我发送了一些响应。遵循我的所有代码。 exp 是第三种方法。

/**
 * Authenticate a user and return the token if the provided credentials are correct.
 *
 * @param Request $request
 * @return mixed
 * @internal param Model $user
 */
public function authenticate(Request $request)

    $this->validate($this->request, [
        'email' => 'required|email',
        'password' => 'required'
    ]);
    // Find the user by email
    $user = User::where('email', $this->request->input('email'))->first();
    if (!$user) 
        return $this->responseError('USER_DOES_NOT_EXISTS', 404);
    

    // Verify the password and generate the token
    if (Hash::check($this->request->input('password'), $user->password)) 
        return $this->responseUserData($user);
    

    // Bad Request response
    return $this->responseError('EMAIL_OR_PASSWORD_WRONG', 403);


/**
* Create response json
* @param $user
* @return \Illuminate\Http\JsonResponse
*/
private function responseUserData($user)

    return response()->json([
        'token' => $this->jwt($user),
        'user' => $user->getUserData()
    ], 200);


/**
 * Create a new token.
 *
 * @param  \App\User $user
 * @return string
 */
protected function jwt(User $user)

    $payload = [
        'iss' => "lumen-jwt", // Issuer of the token
        'sub' => $user->id, // Subject of the token
        'iat' => time(), // Time when JWT was issued.
        'exp' => time() + 60 * 60 * 60 * 24 // Expiration time
    ];

    // As you can see we are passing `JWT_SECRET` as the second parameter that will
    // be used to decode the token in the future.
    return JWT::encode($payload, env('JWT_SECRET'));

希望对你有帮助。

【讨论】:

【参考方案5】:

如果你跑了:

php artisan vendor:publish

根据安装 wiki:https://github.com/tymondesigns/jwt-auth/wiki/Installation

然后简单地更改ttl 设置:

// In config/jwt.php

...

/*
|--------------------------------------------------------------------------
| JWT time to live
|--------------------------------------------------------------------------
|
| Specify the length of time (in minutes) that the token will be valid for.
| Defaults to 1 hour
|
*/

'ttl' => 43800, // valid for 1 month

 ...

【讨论】:

当我运行php artisan vendor:publish 时,我得到There are no commands defined in the "vendor" namespace 如何动态设置。假设默认值为 1 小时,如果在登录时单击记住我,那么我想将“ttl”动态设置为 1 周。任何方式都可以做到这一点。

以上是关于在流明 jwt 令牌中设置过期时间的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 jwt 令牌中设置过期 30 分钟

JWT 令牌过期未设置为所需时间

设置过期时间以采样 django jwt 令牌

强制过期 JWT

过期后使用刷新令牌获取访问令牌(JWT)

如何在jwt中过期时刷新令牌