更新Laravel API中tymon/jwt-auth令牌
P粉798010441
P粉798010441 2023-08-14 14:35:54
0
2
500
<p>我有Laravel API,我已經安裝了<code>tymon/jwt-auth</code>。為了登入使用者並取得令牌,我使用以下程式碼:</p> <pre class="brush:php;toolbar:false;">if (! $token = auth()->attempt($request->only('email', 'password'), true)) { throw ValidationException::withMessages([ 'email' => 'Invalid Credentials', ]); } return new TokenResource([ 'token' => $token, 'user' => $user, ]); </pre> <p>我還有一個<code>refresh token</code>的端點,它應該會使舊的令牌失效並發放一個新的令牌。根據文檔,我添加了以下程式碼:</p> <pre class="brush:php;toolbar:false;">return new TokenResource([ 'token' => auth()->refresh(), 'user' => auth()->user(), ]); </pre> <p>問題是,當我使用當前令牌訪問該端點時,它確實返回一個新的令牌,但舊的令牌仍然有效。 </p> <p>有沒有一種方法可以讓刷新令牌無效? </p>
P粉798010441
P粉798010441

全部回覆(2)
P粉557957970

這是預設行為。所以為了實現你想要的結果,你可以將它們列入黑名單。當使用者嘗試使用一個令牌時,你可以檢查它是否在黑名單中。如果是的話,你可以拒絕它。

你可以透過建立一個中間件來實現這一點,該中間件會檢查令牌是否在黑名單中,並將該中間件應用於需要令牌驗證的路由。

中介軟體:

public function handle($request, Closure $next)
{
    $token = $request->bearerToken();
    
    if (TokenBlacklist::where('token', $token)->exists()) {
        return response()->json(['message' => '令牌已失效'], 401);
    }

    return $next($request);
}

然而,只有在你的系統實際需要時才應該這樣做。

P粉768045522

在建立後,您無法手動使令牌過期。這就是令牌的工作原理。如果您建立了令牌,它將在過期之前有效,但您可以建立令牌的黑名單,每次刷新令牌時,將第一個令牌新增到黑名單中,也可以考慮降低令牌的生命週期(如果足夠低),您可以依靠自動過期機制。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!