2016-12-14 21 views
2

嗨我在前端使用角度js與衛星和laravel在後端與tymon jwt庫。我正在使用jwt身份驗證。我想在我的web應用程序中記住我的功能。我看到'ttl'在laravel'config/jwt.php中設置令牌的到期時間。動態設置laravel jwt的到期時間

/* 
|-------------------------------------------------------------------------- 
| 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

我們可以在創建JWT令牌時設置令牌到期時間。它可以在令牌參數中設置。例如,

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

新令牌將生成相應的到期時間。

+0

我怎麼能在laravel結束。 – user254153

0

我不是100%肯定,但會發生什麼你[email protected]內,如果你設置的配置:

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 
+1

你爲什麼要動態設置它?我已經提到過這個問題。只有當用戶在登錄系統時單擊記住我時,我才希望令牌在1周內過期。如果用戶登錄而不記得我點擊,那麼它應該默認爲1小時。 – user254153

+0

@ user254153這裏同樣的情況!你是如何解決它的? –

3

您可以添加exp作爲自定義要求如下:

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

上面的代碼創建了一個在7天內過期的令牌。您不必使用Carbon它只需要一個Unix時間戳,因爲它內置到Laravel中,所以我在這裏使用了Carbon

+0

好的,謝謝。讓我試試,並讓你知道。 – user254153

+0

@ user254153它對你有用嗎?你介意接受幫助社區的答案嗎?謝謝。 – Jamesking56

+0

偉大的解決方案!以及如何在jwt.php中設置ttl?我可以忽略這個值嗎?但是,可以給我最長的時間,我需要......我說得對嗎? –