如何在TP框架中集成JWT

发布时间:2024-08-27 00:47:57 作者:小樊
来源:亿速云 阅读:92

要在ThinkPHP(TP)框架中集成JWT(JSON Web Token),你需要遵循以下步骤:

  1. 安装JWT库

首先,你需要一个JWT库来处理Token的生成和验证。推荐使用firebase/php-jwt库。通过Composer安装:

composer require firebase/php-jwt
  1. 创建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;
        }
    }
}
  1. 配置JWT密钥和过期时间

在application/config.php文件中添加JWT密钥和过期时间的配置:

return [
    // ...
    'jwt_secret_key' => 'your-secret-key',
    'jwt_exp_time' => 3600, // 1小时
];
  1. 生成和验证Token

在需要生成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;
}
  1. 在中间件中使用JWT

你可以创建一个中间件来验证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。根据实际需求,你可能需要对代码进行一些调整。

推荐阅读:
  1. ThinkPHP后台实现多语言的示例
  2. tp框架与yii2的区别有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tp框架

上一篇:TP框架中的队列系统使用

下一篇:TP框架对PHP版本的要求

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》