1
我正在開發移動應用程序,並且我意識到我的令牌的持續時間有限。我使用的是Symfony的服務器,其中有一個功能,刷新我的令牌:已過期JWT令牌 - 如何刷新令牌
/**
* @Route("/api/refresh", name="api_refresh")
*/
public function refreshTokenAction(Request $request)
{
if(!$request->headers->has('Authorization')) {
return;
}
$extractor = new AuthorizationHeaderTokenExtractor(
'Bearer',
'Authorization'
);
$token = $extractor->extract($request);
$encoder = $this->get('lexik_jwt_authentication.encoder');
$data = $encoder->decode($token);
if(!$data){
return;
}
$username = $data['mail'];
$user = $this->getDoctrine()->getRepository('AppBundle:Benevole')
->findOneBy(['mail' => $username]);
$token = $this->get('lexik_jwt_authentication.encoder')
->encode(['mail' => $user->getMail()]);
// Return genereted tocken
return new JsonResponse(['token' => $token]);
}
我用這臺服務器在AngularJS應用程序,其中我打電話給我的服務器在這樣:
var refreshToken = function(idPatient){
var token = window.localStorage.getItem('token'); // current valid token
return $http({
method : 'GET',
url : url + '/refresh',
headers : {Authorization : 'Bearer ' + token},
}).then(function(result) {
console.log(result.data);
return result.data;
});
};
當我測試我的函數刷新令牌時,單擊一個按鈕,它會起作用,令牌被刷新。
我想知道如何自動刷新我的令牌,這樣用戶就不必每次都斷開連接,因爲它是相當有限制的^^ 我應該每次檢查我的令牌嗎?我是否應該爲應用程序提供幾個條件以便每次都能找到它?
除了'refreshCount'之外,還可以引入絕對過期時間,這也是限制刷新次數的自定義屬性。 – zerkms
這是另一個有效的方法:) –
是的,它們確實是一樣的:-)我也看到人們發佈了一個單獨的長生存刷新令牌,用於發佈短期存在的JWT。在某些情況下,它可能更方便。 – zerkms