Laravel 在lumen jwt令牌中设置过期时间

Laravel 在lumen jwt令牌中设置过期时间,laravel,jwt,lumen,Laravel,Jwt,Lumen,我使用jwt和Lumen创建了一个身份验证api 我在Lumen项目中使用tymondesigns/jwt auth包进行身份验证。在项目中,当用户登录时,我希望用户令牌在1个月后过期 现在如何修复它?如果您运行: php artisan供应商:发布 根据安装wiki: 然后简单地更改ttl设置: // In config/jwt.php ... /* |---------------------------------------------------------------------

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

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

现在如何修复它?

如果您运行:

php artisan供应商:发布

根据安装wiki:

然后简单地更改
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

 ...

事实上,对我来说,当我在
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'));
}
我希望它能帮助你。

中的最新(varsion>1.0.0)lumen
JWT\U TTL
。env
将在他们的内部代码中使用
'TTL'=>env('JWT\U TTL',60),

Ref:

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


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

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

JWT_TTL=1440

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

当我运行
php artisan vendor:publish
I get
时,“vendor”命名空间中没有定义任何命令
如何动态设置它。假设默认值为1小时,如果登录时单击了“记住我”,则我希望将“ttl”动态设置为1周。任何方法都可以做到这一点。