嗨我在前端使用角度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,
默认情况下,它将是1小时。但是如果用户点击在登录时记住我,我想动态地将其更改为1周。我该如何动态更改它。谢谢。
答案 0 :(得分:5)
您可以将exp
添加为自定义声明,如下所示:
$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);
上面的代码创建了一个在7天后到期的令牌。您不必使用Carbon
它只需要一个Unix时间戳,为了简单起见,我在这里使用Carbon
,因为它内置在Laravel中。
答案 1 :(得分:3)
您可以使用JWTFactory
(1.0版)
$myTTL = 30; //minutes
JWTAuth::factory()->setTTL($muTTL);
$token = JWTAuth::attempt($credentials);
答案 2 :(得分:2)
我不是100%确定,但如果您在AppServiceProvider@register
配置中设置了会发生什么:
config()->set('jwt.ttl', 60*60*7);
或有立面:
Config::set('jwt.ttl', 60*60*7);
为什么要动态设置它?或者你不使用配置发布(它不发布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),
在.env
内:
JWT_TTL=3600
答案 3 :(得分:1)
Tymon JWT v 1.0
您可以在尝试登录用户时覆盖默认的ttl:
if (! $token = auth()->setTTL(1)->attempt($credentials)) {
return response()->json(['message' => 'Unauthorized user'], 401);
}
答案 4 :(得分: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});
将生成具有相应到期时间的新令牌。
答案 5 :(得分:0)
您可以执行以下操作以生成具有所需到期时间的JWT令牌:
{
"largeImageString": "string"
}
答案 6 :(得分:0)
对于JWT 1.0.0-rc.2版本,在config / jwt.php上的文档中有非常清楚的描述
根据注释: .... 您也可以将其设置为null ,以产生永不过期的令牌。 有些人可能想要这种行为,例如移动应用。 不推荐这样做,因此请确保您有适当的选择。 必要时有适当的系统撤销令牌。 通知:如果将其设置为null,则应从“ required_claims”列表中删除“ exp”元素。
'ttl' => env('JWT_TTL', 60) meaning we must set 60 to null
'required_claims' => [
'iss',
'iat',
// 'exp', <- remove this
'nbf',
'sub',
'jti',
],
答案 7 :(得分:0)
以上所有答案均不适用于我。我设法使它像这样工作。
$ttl_in_minutes = 60*24*100;
// The parameter passed to the auth helper should match what is present in config/auth.php
if($request->input('remember')) auth('api')->factory()->setTTL($ttl_in_minutes);
答案 8 :(得分:0)
SESSION_LIFETIME=10080
session.php中的默认值120分钟
答案 9 :(得分:0)
您可以使用来动态设置令牌过期
JWTAuth::factory()->setTTL($expirationInMinutes);
JWTAuth::attempt($credentials)
以下代码在最新版本中不可用
$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);
答案 10 :(得分:0)
在不更改config / jwt.php的情况下覆盖令牌ttl
$ token = auth()-> setTTL(7200)->尝试($ credentials);