JWT(JSON Web Token)是一種開放標準(RFC 7519),用於在網絡應用中安全傳輸令牌。它廣泛應用於用戶身份認證和權限管理。 ThinkPHP6作為一款流行的PHP框架,提供了豐富的組件支持,方便開發者集成JWT認證功能。本文將逐步講解如何在ThinkPHP6中實現JWT認證。
首先,需要通過Composer安裝JWT相關的擴展庫。進入項目根目錄,在終端執行以下命令:
<span class="fun">composer require firebase/php-jwt</span>
安裝完成後,在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認證,能夠提升應用的安全性,實現高效的用戶身份管理。