您好,登錄后才能下訂單哦!
要在ThinkPHP(TP)框架中集成JWT(JSON Web Token),你需要遵循以下步驟:
首先,你需要一個JWT庫來處理Token的生成和驗證。推薦使用firebase/php-jwt庫。通過Composer安裝:
composer require firebase/php-jwt
在application/library目錄下創建一個名為Jwt.php的文件,并編寫以下代碼:
<?php
namespace library;
use \Firebase\JWT\JWT;
class Jwt
{
// 生成token
public static function createToken($userId, $secretKey, $expTime)
{
$payload = [
'iss' => 'your-issuer', // 簽發者
'aud' => 'your-audience', // 接收方
'iat' => time(), // 簽發時間
'nbf' => time() + 10, // 在此之前不生效
'exp' => time() + $expTime, // 過期時間
'data' => [
'userId' => $userId, // 用戶ID
],
];
return JWT::encode($payload, $secretKey);
}
// 解析token
public static function verifyToken($token, $secretKey)
{
try {
$decoded = JWT::decode($token, $secretKey, ['HS256']);
return $decoded->data;
} catch (\Exception $e) {
return false;
}
}
}
在application/config.php文件中添加JWT密鑰和過期時間的配置:
return [
// ...
'jwt_secret_key' => 'your-secret-key',
'jwt_exp_time' => 3600, // 1小時
];
在需要生成Token的地方調用createToken方法:
use library\Jwt;
$userId = 1; // 用戶ID
$secretKey = config('jwt_secret_key');
$expTime = config('jwt_exp_time');
$token = Jwt::createToken($userId, $secretKey, $expTime);
在需要驗證Token的地方調用verifyToken方法:
use library\Jwt;
$token = 'your-token';
$secretKey = config('jwt_secret_key');
$result = Jwt::verifyToken($token, $secretKey);
if ($result === false) {
// Token無效或已過期
} else {
// Token有效,獲取用戶ID
$userId = $result->userId;
}
你可以創建一個中間件來驗證Token,這樣可以確保每次請求都會進行Token驗證。在application/middleware.php文件中添加JWT中間件:
return [
// ...
'jwt' => \app\middleware\JwtMiddleware::class,
];
然后在application/middleware/JwtMiddleware.php文件中編寫中間件代碼:
<?php
namespace app\middleware;
use library\Jwt;
use think\facade\Config;
class JwtMiddleware
{
public function handle($request, \Closure $next)
{
$token = $request->header('Authorization');
if (!$token) {
return json(['code' => 401, 'msg' => '缺少Token']);
}
$secretKey = Config::get('jwt_secret_key');
$result = Jwt::verifyToken($token, $secretKey);
if ($result === false) {
return json(['code' => 401, 'msg' => 'Token無效或已過期']);
}
// 將用戶ID存儲到請求對象中
$request->userId = $result->userId;
return $next($request);
}
}
最后,在需要驗證Token的路由中應用JWT中間件:
Route::group('api', function () {
// ...
})->middleware('jwt');
現在,你已經在ThinkPHP框架中集成了JWT。根據實際需求,你可能需要對代碼進行一些調整。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。