前言
在使用 Laravel 和 JWT 進行 Web 開發的過程中,可能會遇到刪除 JWT 的情況,本文將介紹如何在 Laravel 框架中刪除 JWT。
刪除 JWT 的必要性
JWT 很好地解決了使用者身份驗證和授權問題,但在某些情況下,您可能需要刪除 JWT。以下是一些原因:
刪除JWT 的步驟
要刪除JWT,有以下三個步驟:
我們將更詳細地說明這些步驟。
撤銷 JWT
JWT 撤銷需要您維護一個 JWT 黑名單。當用戶登出或退出應用程式時,將該用戶的 JWT 加入黑名單。當用戶嘗試使用該 JWT 存取您的應用程式時,您的應用程式將檢查 JWT 是否在黑名單中。如果是,則不允許使用者進入您的應用程式。以下是實現此操作的步驟:
Step 1:建立一個中間件
建立一個名為 "JwtBlacklist" 的中間件。
php artisan make:middleware JwtBlacklist
Step 2:編寫程式碼
在中間件的handle 方法中寫以下程式碼:
public function handle($request, Closure $next) { $token = $request->bearerToken(); if(auth()->check()){ auth()->logout(); JWTAuth::invalidate(JWTAuth::getToken()); return response()->json(['message' => 'Logout successful']); }elseif($token){ try { JWTAuth::parseToken()->authenticate(); JWTAuth::invalidate(JWTAuth::getToken()); return response()->json(['message' => 'Logout successful']); } catch (JWTException $e) { // ignore errors } } return $next($request); }
Step 3:註冊中間件
#在app /Http/Kernel.php 檔案的$routeMiddleware 陣列中註冊中間件。
'jwt.blacklist' => AppHttpMiddlewareJwtBlacklist::class,
修改 JWT 的有效期限
JWT 由三個部分組成,分別是頭部(Base64 編碼的 JSON 物件)、載荷(Base64 編碼的 JSON 物件)和簽名。因此,您可以更改加載中的有效期。
在 Laravel/JWT 中,您可以使用以下程式碼:
public function login(Request $request) { $credentials = $request->only('email', 'password'); if ($token = JWTAuth::attempt($credentials, ['exp' => Carbon::now()->addHours(24)->timestamp])) { return response()->json(['message' => 'Success', 'token' => $token]); } return response()->json(['error' => 'Unauthorized'], 401); }
在上面的程式碼中,我們將 JWT 的有效期限設為 24 小時。
刪除 JWT
如果您要求使用者手動刪除 JWT,則需要將此資訊清楚地告訴使用者。您可以為註銷操作提供一個按鈕或鏈接,以便用戶能夠刪除 JWT。
如果您要透過編寫程式碼刪除 JWT,則可以將下面的程式碼加入您的控制器:
public function logout(Request $request) { JWTAuth::invalidate(JWTAuth::getToken()); return response()->json(['message' => 'Logout successful']); }
當使用者點擊登出按鈕時,該控制器將刪除 JWT。
結束語
本文介紹如何在 Laravel 和 JWT 中刪除 JWT。您可以透過撤銷、修改 JWT 的有效期和刪除 JWT 來實現此操作。如有任何問題和疑問,請在評論區留言,我會盡快回覆。
以上是laravel jwt刪除的詳細內容。更多資訊請關注PHP中文網其他相關文章!