动态设置laravel jwt的到期时间

use*_*153 6 php jwt angularjs laravel-5

嗨,我在前端使用角度js,在后端使用带有tymon jwt库的卫星和laravel.我正在使用jwt身份验证.我想在我的网络应用程序中记住我的功能.我看到'ttl'在laravel'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' => 60,
Run Code Online (Sandbox Code Playgroud)

默认情况下,它将是1小时.但是如果用户点击在登录时记住我,我想动态地将其更改为1周.我该如何动态更改它.谢谢.

Ved*_*ant 8

您可以执行以下操作来生成具有所需过期时间的 JWT 令牌:

JWTAuth::customClaims(['exp' => Carbon\Carbon::now()->addDays(2)->timestamp])
    ->fromUser($user);
Run Code Online (Sandbox Code Playgroud)


Jam*_*g56 7

您可以添加exp为自定义声明,如下所示:

$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了一个在7天后到期的令牌.您不必使用Carbon它只需要一个Unix时间戳,我在Carbon这里使用它是为了简单,因为它内置到Laravel.


Yor*_*gen 6

我不是 100% 确定,但是如果你在AppServiceProvider@register配置中设置会发生什么:

config()->set('jwt.ttl', 60*60*7);
Run Code Online (Sandbox Code Playgroud)

或者有一个门面:

Config::set('jwt.ttl', 60*60*7);
Run Code Online (Sandbox Code Playgroud)

为什么要动态设置它?或者您不使用配置中的发布(它不发布config/jwt.php)?

编辑:

.env另一个解决方案是通过您的文件设置它:

config/jwt.php
// set the default TTL to one week if the .env file does not contain a `JWT_TTL` var
'ttl' => env('JWT_TTL', 60*60*7), 
Run Code Online (Sandbox Code Playgroud)

并在其中.env

JWT_TTL=3600
Run Code Online (Sandbox Code Playgroud)


And*_*ich 5

可以使用JWTFactory(1.0版)

$myTTL = 30; //minutes

JWTAuth::factory()->setTTL($muTTL);
$token = JWTAuth::attempt($credentials);
Run Code Online (Sandbox Code Playgroud)


小智 0

我们可以在创建 JWT 令牌时设置令牌到期时间。可以在token参数中设置。例如

$token      = array(
                         "iss" => "http://example.com",
                          "aud" => "http://example.com",
                          "exp" => {YOUR_EXPIRY_TIME}
                        );
$jwt=new JWT();
$JWT_TOKEN=$jwt->encode($token, {YOUR_KEY});
Run Code Online (Sandbox Code Playgroud)

新的令牌将生成并具有相应的到期时间。