在現今網路應用大規模開發中,使用者的安全認證是不可或缺的一部分。為了確保使用者的安全,常見的做法是使用JSON Web Token(JWT)進行身份驗證。它可以輕鬆有效地實現使用者身份驗證和權限控制。在本文中,我們將介紹如何在ThinkPHP6專案中使用JWT進行認證。
什麼是JSON Web Token?
JSON Web Token(JWT)是一種輕量級的身份驗證機制。它的作用是在網路上安全地傳輸聲明,它可以被用作身份驗證和聲明交換的一種方式。 JWT包含在HTTP請求標頭或URL參數中,所以很容易便捷地在服務端和用戶端之間傳輸。
JWT由三個部分組成:頭部、負荷和簽名。頭部包含了描述簽名演算法和類型的信息,載荷包含了聲明和數據信息,簽名則用於驗證JWT的合法性。 JWT的負載中可以儲存任何數據,你可以自訂需要的資訊。
在ThinkPHP6中使用JWT進行認證的步驟
步驟一:安裝 jwt-auth 擴充功能
首先,我們需要在專案中引入 jwt-auth 擴充。在 composer.json 檔案中加入以下依賴:
"tymon/jwt-auth": "^1.0.0-rc.5"
在安裝完依賴後使用 composer update 更新一下。
步驟二:產生設定檔
執行下面的指令產生設定檔:
php think jwt:publish
產生設定檔後,我們需要修改配置,設定JWT 金鑰和有效期限等參數,修改/config/jwt.php 檔案即可。
步驟三:寫認證中間件
JWT 的認證過程需要在伺服器端完成。因此,我們需要建立一個中間件 AuthMiddleware,在請求到達控制器前,對 JWT 進行認證。
首先,我們需要建立AuthMiddleware 檔案:
php think make:middleware AuthMiddleware
在AuthMiddleware 檔案中,我們可以使用以下程式碼對JWT 進行認證:
<?php namespace appmiddleware; use thinkacadeRequest; use TymonJWTAuthExceptionsTokenExpiredException; use TymonJWTAuthFacadesJWTAuth; use thinkexceptionHttpException; class AuthMiddleware { public function handle($request, Closure $next) { //获取JWT token $token = JWTAuth::getToken(); if (!$token) { throw new HttpException(401, 'Token not provided'); } try { //验证JWT token $user = JWTAuth::authenticate($token); $request->user = $user; } catch (TokenExpiredException $exception) { throw new HttpException(401, 'Token expired'); } catch (Exception $exception) { throw new HttpException(401, 'Token invalid'); } return $next($request); } }
在handle 函數中,我們首先獲取JWT 的token。如果 token 不存在,就會拋出 401 個例外。
如果 token 存在,我們就使用 JWTAuth::authenticate($token) 來驗證token的合法性,成功則將使用者資訊綁定到請求上下文中。
要注意的是,在上述程式碼中,所有拋出例外的情況都會回傳 401 錯誤代碼。
步驟四:使用中介軟體進行認證
在控制器中使用AuthMiddleware 中介軟體進行驗證,如下所示:
<?php namespace appcontroller; use appmiddlewareAuthMiddleware; class UserController extends Base { protected $middleware = [ AuthMiddleware::class ]; public function index() { return json($this->request->user, 200); } }
在上述程式碼中,我們向控制器新增了一個AuthMiddleware 中間件,因此在請求到達控制器之前將會自動執行該中間件。
控制器的 index 方法傳回目前請求使用者的訊息,如果 JWT 認證正確,將傳回 json 格式的使用者資訊。
結論
本文介紹如何在ThinkPHP6專案中使用JWT進行認證。我們透過安裝 JWT 擴充功能和產生設定檔、編寫認證中間件、使用中間件等步驟,詳細介紹了 JWT 身份驗證的實作過程。這個過程中,我們對JWT的相關知識有了更深入的了解,也為未來的網路開發提供了有價值的經驗。
以上是在ThinkPHP6中使用JWT進行認證的詳細內容。更多資訊請關注PHP中文網其他相關文章!