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周.我该如何动态更改它.谢谢.
您可以执行以下操作来生成具有所需过期时间的 JWT 令牌:
JWTAuth::customClaims(['exp' => Carbon\Carbon::now()->addDays(2)->timestamp])
->fromUser($user);
Run Code Online (Sandbox Code Playgroud)
您可以添加exp为自定义声明,如下所示:
$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);
Run Code Online (Sandbox Code Playgroud)
上面的代码创建了一个在7天后到期的令牌.您不必使用Carbon它只需要一个Unix时间戳,我在Carbon这里使用它是为了简单,因为它内置到Laravel.
我不是 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)
可以使用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)
新的令牌将生成并具有相应的到期时间。