當前位置: 首頁> 最新文章列表> ThinkPHP6實現JWT認證詳解,輕鬆掌握用戶身份驗證

ThinkPHP6實現JWT認證詳解,輕鬆掌握用戶身份驗證

gitbox 2025-08-02

引言

JWT(JSON Web Token)是一種開放標準(RFC 7519),用於在網絡應用中安全傳輸令牌。它廣泛應用於用戶身份認證和權限管理。 ThinkPHP6作為一款流行的PHP框架,提供了豐富的組件支持,方便開發者集成JWT認證功能。本文將逐步講解如何在ThinkPHP6中實現JWT認證。

安裝JWT擴展

使用Composer安裝擴展庫

首先,需要通過Composer安裝JWT相關的擴展庫。進入項目根目錄,在終端執行以下命令:

 <span class="fun">composer require firebase/php-jwt</span>

配置JWT參數

安裝完成後,在ThinkPHP6的配置目錄下新建或修改jwt.php文件,配置如下內容:

 return [
    'secret'    => 'your_secret_key',
    'algorithm' => 'HS256',
];

其中, secret是用於簽名的密鑰,建議設置為隨機字符串, algorithm是加密算法,可選HS256、HS384或HS512。

創建認證中間件

創建中間件類

認證中間件用於在請求到達控制器前驗證JWT令牌。使用命令快速生成中間件:

 <span class="fun">php think make:middleware JwtMiddleware</span>

該命令會在app/middleware目錄下生成JwtMiddleware類文件。

編寫中間件邏輯

打開JwtMiddleware文件,補充身份驗證代碼:

 use think\facade\Request;
use think\facade\Response;
use Firebase\JWT\JWT;

class JwtMiddleware
{
    public function handle($request, \Closure $next)
    {
        $token = Request::header('Authorization');
        
        if (empty($token)) {
            return Response::create('Unauthorized', '401');
        }
        
        try {
            JWT::decode($token, config('jwt.secret'), [config('jwt.algorithm')]);
        } catch (\Exception $e) {
            return Response::create('Invalid token', '401');
        }
        
        return $next($request);
    }
}

代碼中,首先從請求頭獲取JWT令牌,若為空則返回401錯誤;隨後驗證令牌合法性,若失敗同樣返回401;驗證通過後,繼續執行後續請求。

應用中間件

路由中應用

route/route.php中,將需要認證的路由添加中間件:

 \think\Route::group(function () {
    // 需要認證的路由
})->middleware(\app\middleware\JwtMiddleware::class);

控制器中應用

也可以在控制器類註解中聲明中間件:

 namespace app\controller;

use think\annotation\route\Post;
use app\middleware\JwtMiddleware;

/**
 * @route("auth")
 * @middleware(JwtMiddleware::class)
 */
class AuthController
{
    // 控制器代碼
}

這樣控制器內所有路由都會自動通過JWT認證中間件。

測試身份認證

完成配置後,使用Postman或其他接口測試工具發送帶有有效JWT令牌的請求,驗證接口是否正常響應。無效或缺失令牌時,應返回401未授權錯誤。

總結

本文介紹瞭如何在ThinkPHP6框架中集成JWT認證。涵蓋了擴展安裝、配置、認證中間件創建與應用,以及接口測試的完整流程。通過實現JWT認證,能夠提升應用的安全性,實現高效的用戶身份管理。