应使用firebase/php-jwt包:执行composer require firebase/php-jwt:^6.10(php≥7.4且启用openssl),代码中use firebase\jwt\jwt和key,调用encode/decode时传入jwt::alg_hs256及new key($key, 'hs256'),并确保web服务器透传authorization头。

如果您在ThinkPHP项目中需要实现JWT认证功能,但无法成功安装或调用JWT相关类,则很可能是由于Composer包名错误、PHP版本不兼容或自动加载未生效所致。以下是解决此问题的步骤:
一、执行正确的Composer安装命令
firebase/php-jwt是唯一推荐、长期活跃、无框架绑定的通用JWT库,其他名称相似的包(如jwt、php-jwt、tymon/jwt-auth)均不适用。安装时必须使用完整且准确的包名,否则Composer将无法识别。
1、在项目根目录下打开终端,执行:composer require firebase/php-jwt:^6.10
2、若项目运行于PHP 7.2环境,需降级安装:composer require firebase/php-jwt:^5.2
3、若国内网络不稳定,先配置阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
二、确认PHP环境满足最低要求
firebase/php-jwt v6.10要求PHP ≥ 7.4且必须启用openssl扩展,否则安装过程可能静默失败或后续调用报错。
1、检查PHP版本:php -v
2、检查openssl扩展是否启用:php -m | grep openssl(Linux/macOS)或运行php -m后手动查找openssl(Windows)
3、若未启用,编辑php.ini文件,取消extension=openssl前的分号注释,保存后重启Web服务器或CLI环境
三、修复Class not found类加载错误
即使安装成功,若代码中出现“Class 'Firebase\JWT\JWT' not found”,说明自动加载机制未触发或命名空间引用有误,而非包本身缺失。
1、确认入口文件(如public/index.php)第一行已包含:require __DIR__ . '/../vendor/autoload.php';
2、在使用JWT的PHP文件顶部添加命名空间声明:use Firebase\JWT\JWT;
3、若从Git克隆项目且无vendor目录,删除现有composer.lock,再执行:composer install(非require)
四、适配v6+版本的API变更
v6.10起强制要求使用Key对象与算法常量,旧版三参数调用方式(JWT::encode($p, $k, 'HS256'))将直接抛出ArgumentCountError。
1、修改use语句,补充Key类:use Firebase\JWT\Key;
2、生成Token时传入JWT::ALG_HS256常量:JWT::encode($payload, $key, JWT::ALG_HS256);
3、验证Token时必须构造Key对象:JWT::decode($token, new Key($key, 'HS256'));
五、处理Web服务器Header透传问题
本地调试正常但上线后$_SERVER['HTTP_AUTHORIZATION']为空,通常因Nginx/Apache过滤了Authorization头,导致JWT中间件无法提取Bearer Token。
1、Nginx配置中添加:fastcgi_pass_request_headers on;
2、Nginx中补充:proxy_set_header Authorization $http_authorization;
3、Apache中在.htaccess添加两行重写规则:RewriteCond %{HTTP:Authorization} ^(.*)+$
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











