在ThinkPHP6中使用JWT進行認證

在如今互聯(lián)網(wǎng)應(yīng)用大規(guī)模開發(fā)中,用戶的安全認證是必不可少的一部分。為了確保用戶的安全,常見的做法是使用json web token(jwt)進行身份驗證。它可以輕松有效地實現(xiàn)用戶身份驗證和權(quán)限控制。在本文中,我們將介紹如何在thinkphp6項目中使用jwt進行認證。

什么是JSON Web Token?

JSON Web Token(JWT)是一種輕量級的身份驗證機制。它的作用是在網(wǎng)絡(luò)上安全地傳輸聲明,它可以被用作身份驗證和聲明交換的一種方式。JWT包含在HTTP請求頭或URL參數(shù)中,所以很容易便捷地在服務(wù)端和客戶端之間傳輸。

JWT由三個部分組成:頭部、載荷和簽名。頭部包含了描述簽名算法和類型的信息,載荷包含了聲明和數(shù)據(jù)信息,簽名則用于驗證JWT的合法性。JWT的載荷中可以存儲任何數(shù)據(jù),你可以自定義需要的信息。

thinkphp6中使用JWT進行認證的步驟

立即學(xué)習(xí)PHP免費學(xué)習(xí)筆記(深入)”;

步驟一:安裝 jwt-auth 擴展

首先,我們需要在項目中引入 jwt-auth 擴展。在 composer.json 文件中添加如下依賴:

"tymon/jwt-auth": "^1.0.0-rc.5"

在安裝完依賴后使用 composer update 更新一下。

步驟二:生成配置文件

運行下面的命令生成配置文件:

php think jwt:publish

生成配置文件后,我們需要修改配置,設(shè)置 JWT 密鑰和有效期等參數(shù),修改 /config/jwt.php 文件即可。

步驟三:編寫認證中間件

JWT 的認證過程需要在服務(wù)器端完成。因此,我們需要創(chuàng)建一個中間件 AuthMiddleware,在請求到達控制器前,對 JWT 進行認證。

首先,我們需要創(chuàng)建 AuthMiddleware 文件:

php think make:middleware AuthMiddleware

在 AuthMiddleware 文件中,我們可以使用如下代碼對 JWT 進行認證:

acadeRequest; 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 函數(shù)中,我們首先獲取 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-&gt;user, 200);     } }

在上述代碼中,我們向控制器添加了一個 AuthMiddleware 中間件,因此在請求到達控制器之前將會自動執(zhí)行該中間件。

控制器的 index 方法返回當前請求用戶的信息,如果 JWT 認證正確,將返回 json 格式的用戶信息。

結(jié)論

本文介紹了如何在ThinkPHP6項目中使用JWT進行認證。我們通過安裝 JWT 擴展和生成配置文件、編寫認證中間件、使用中間件等步驟,詳細介紹了 JWT 身份驗證的實現(xiàn)過程。 這個過程中,我們對JWT的相關(guān)知識有了更深入的了解,也為以后的互聯(lián)網(wǎng)開發(fā)提供了有價值的經(jīng)驗。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊13 分享