第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JWT認證怎么使token只能使用一次

JWT認證怎么使token只能使用一次

PHP
幕布斯6054654 2019-03-10 19:38:11
項目用的是laravel。認證方式是jwt認證,我想token只能使用一次但是不知道怎么做?求大神提供思路.
查看完整描述

2 回答

?
呼如林

TA貢獻1798條經(jīng)驗 獲得超3個贊

剛才研究了一下源碼得到如下答案
最簡單的辦法就是使用jwt自帶的jwt.refresh路由中間件(在這之前應(yīng)該使用jwt.auth驗證了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ù)負責(zé)依據(jù)現(xiàn)在的token生成一個新的token并把現(xiàn)在的token放到黑名單
最后將newToken寫到返回給客戶端的header中

最后我在研究源碼的時候還發(fā)現(xiàn)如果我們需要每個請求都要刷新token的話那么就用jwt.refresh這一個中間件就好,不再需要jwt.auth這個中間件了。因為產(chǎn)生新的token的時候會解析出原來token中的payload的信息,比如sub。因此也會對原始的token進行驗證。

查看完整回答
反對 回復(fù) 2019-03-18
?
忽然笑

TA貢獻1806條經(jīng)驗 獲得超5個贊

JWT 認證應(yīng)該帶上時間戳(或者其他可以表明請求獨立性的東西),每次發(fā)送請求的時候都計算一次 token,后端會拿到包含時間戳的參數(shù)列表和 token,然后根據(jù)它們也計算一個 token,如果兩邊一致,則 token 驗證通過。

因此 token 本身就是要每次都重新計算一次的,你在前端存儲 token 是沒有太大價值的,當(dāng)然可以用于記錄日志,但這并沒有太多意義。

查看完整回答
反對 回復(fù) 2019-03-18
  • 2 回答
  • 0 關(guān)注
  • 2689 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號