JWT官網 https://jwt.io/ 選擇第一個 composer require firebase/php-jwt use Firebase\JWT\ExpiredException;use Firebase\JWT\JWT;use Firebase\JWT\Key;use Firebase ...
JWT官網
https://jwt.io/
選擇第一個
composer require firebase/php-jwt
use Firebase\JWT\ExpiredException;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use Firebase\JWT\SignatureInvalidException;
public function createToken()
{
$jwtContent = [
// 簽發人,這裡採用當前站點功能變數名稱
'iss' => 'myName',
// 簽發時間,當前時間戳
'iat' => time(),
// 到期時間,1天後
'exp' => time() + 86400,
// 自定義數據
'data' => [
'user_id' => 1,
'user_name' => 'jack'
]
];
// 自定義 key,用於加密 token,只保存在服務端,不可泄漏。
// api、admin端可以設置兩個不同的
$key = 'iwsojfiowejgiroegnioamr';
// 使用 HS256 演算法,生成 token 。
$token = JWT::encode($jwtContent, $key, 'HS256');
// 列印輸出
echo($token);
}
public function checkToken()
{
try {
// 此 key 必須和生成 token 時的一致。
$key = 'iwsojfiowejgiroegnioamr';
// 接收客戶端提交的 token 。
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJteU5hbWUiLCJpYXQiOjE2OTQ1MzI5NjYsImV4cCI6MTY5NDUzMjk4NiwiZGF0YSI6eyJ1c2VyX2lkIjoxLCJ1c2VyX25hbWUiOiJqYWNrIn19.p4Ri4jEv5iEM0vMEcmYh5Ipzwqh7iGJKYVDAetPHVIs';
$test = JWT::decode($token, new Key($key, 'HS256'));
dump($test);
dump($test->data->user_id);
} catch (SignatureInvalidException $signatureInvalidException) {
// 獲取驗證失敗時拋出的錯誤信息
//dump($signatureInvalidException->getMessage());
dump('token錯誤');
} catch (ExpiredException $expiredException) {
// 獲取 token 過期時拋出的錯誤信息
//dump($expiredException->getMessage());
dump('token過期');
} catch (\Exception $exception) {
// 獲取拋出的其它錯誤信息
//dump($exception->getMessage());
dump('token錯誤');
}
}
假設token過期時間為3天,如果用戶連續使用2天,到了第三天想不用重新登錄,可以延長過期時間
方案一:登錄時,把過期時間返回給前端,讓前端在過期前重新獲取新token