动态设置laravel jwt的到期时间

时间:2016-12-14 11:06:41

标签: php angularjs laravel-5 jwt

嗨我在前端使用角度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周。我该如何动态更改它。谢谢。

11 个答案:

答案 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)

增加Laravel身份验证令牌的过期时间

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);