2 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
剛才研究了一下源碼得到如下答案
最簡(jiǎn)單的辦法就是使用jwt自帶的jwt.refresh路由中間件(在這之前應(yīng)該使用jwt.auth驗(yàn)證了token的合法性).源代碼如下
public function handle($request, \Closure $next)
{
$response = $next($request);
try {
$newToken = $this->auth->setRequest($request)->parseToken()->refresh();
} catch (TokenExpiredException $e) {
return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]);
} catch (JWTException $e) {
return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]);
}
// send the refreshed token back to the client
$response->headers->set('Authorization', 'Bearer '.$newToken);
return $response;
}
步驟為:
parseToken()把前端傳過來的在http header中的token解析出來
refresh()函數(shù)負(fù)責(zé)依據(jù)現(xiàn)在的token生成一個(gè)新的token并把現(xiàn)在的token放到黑名單
最后將newToken寫到返回給客戶端的header中
最后我在研究源碼的時(shí)候還發(fā)現(xiàn)如果我們需要每個(gè)請(qǐng)求都要刷新token的話那么就用jwt.refresh這一個(gè)中間件就好,不再需要jwt.auth這個(gè)中間件了。因?yàn)楫a(chǎn)生新的token的時(shí)候會(huì)解析出原來token中的payload的信息,比如sub。因此也會(huì)對(duì)原始的token進(jìn)行驗(yàn)證。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
JWT 認(rèn)證應(yīng)該帶上時(shí)間戳(或者其他可以表明請(qǐng)求獨(dú)立性的東西),每次發(fā)送請(qǐng)求的時(shí)候都計(jì)算一次 token,后端會(huì)拿到包含時(shí)間戳的參數(shù)列表和 token,然后根據(jù)它們也計(jì)算一個(gè) token,如果兩邊一致,則 token 驗(yàn)證通過。
因此 token 本身就是要每次都重新計(jì)算一次的,你在前端存儲(chǔ) token 是沒有太大價(jià)值的,當(dāng)然可以用于記錄日志,但這并沒有太多意義。
- 2 回答
- 0 關(guān)注
- 2664 瀏覽
添加回答
舉報(bào)