當前位置: 首頁> 最新文章列表> 在ThinkPHP6中實現JWT身份驗證的完整指南

在ThinkPHP6中實現JWT身份驗證的完整指南

gitbox 2025-07-14

什麼是JWT?

JWT(JSON Web Token)是一種用於在網絡應用之間傳遞安全信息的加密令牌。它以JSON對象的形式在客戶端和服務器之間安全地傳輸信息。

JWT的工作原理

JWT由三個部分組成:Header(頭部)、Payload(負載)和Signature(簽名)。

Header:聲明了令牌的類型和加密算法。示例:

 {
  "alg": "HS256",
  "typ": "JWT"
}

Payload:包含了一些標準聲明和自定義聲明。示例:

 {
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Signature:通過將Header和Payload的Base64編碼與一個密鑰進行簽名生成。

在ThinkPHP6中使用JWT驗證的步驟

安裝JWT擴展

在ThinkPHP6中使用JWT驗證,首先需要安裝JWT擴展。在項目目錄下的composer.json文件中,添加如下依賴:

 "require": {
  "firebase/php-jwt": "5.0.0"
}

然後運行composer install命令來安裝JWT擴展。

生成Token

在登錄成功後,我們可以生成一個Token,並將其返回給客戶端。示例代碼:

 use think\jwt\JWT;

public function login() {
  // 登錄邏輯
  $payload = [
    'sub' => $user->id,
    'name' => $user->username,
    'iat' => time()
  ];
  $token = JWT::encode($payload, $key);
  return json(['token' => $token]);
}

驗證Token

在需要驗證用戶身份的地方,可以使用JWT來驗證Token的有效性。示例代碼:

 use think\jwt\JWT;

public function getUser(Request $request) {
  $token = $request->header('Authorization');
  try {
    $payload = JWT::decode($token, $key, ['HS256']);
    $user = User::get($payload->sub);  // 從數據庫中獲取用戶信息
    return json($user);
  } catch (Exception $e) {
    return json(['error' => 'Token is invalid']);
  }
}

總結

JWT是一種便捷且安全的身份驗證方式,在ThinkPHP6中實現JWT驗證也非常簡單。通過生成和驗證Token的過程,可以有效保護用戶身份安全。同時,保護好秘鑰以及合理設置Token的過期時間,可以進一步增強系統安全性。