ThinkPHP6中JWT接口授权核心是用Token替代Session实现无状态鉴权,关键四步闭环:安装firebase/php-jwt库→配置jwt.php(secret、exp、iss等)→登录成功后JWT::encode生成含uid/iat/exp的Token→通过中间件从Authorization头提取并JWT::decode校验。

ThinkPHP6 添加 JWT 接口授权,核心是用 Token 替代 Session 实现无状态鉴权,适合前后端分离项目。关键不在于装多少包,而在于四步闭环:装库 → 配置 → 登录发 Token → 中间件验 Token。
安装并引入 JWT 库
推荐使用官方维护的 firebase/php-jwt(稳定、文档全):
- 执行命令安装:
composer require firebase/php-jwt - 确保 PHP 版本 ≥ 7.4(TP6 要求),且 OpenSSL 扩展已启用
- 无需额外注册服务提供者,直接 use 即可使用
配置 JWT 参数
在 config/jwt.php 中新建配置文件(若无):
-
'secret':密钥,建议从环境变量读取,如env('JWT_SECRET', 'a-very-strong-key-here') -
'exp':过期时间(秒),例如3600表示 1 小时 -
'iss':签发者标识,如'tp6-api',用于校验 Token 来源合法性 - 可选加
'aud'(受众)、'nbf'(不可早于时间)增强安全性
登录接口生成 Token
用户密码校验通过后,构造 Payload 并签名返回:
- Payload 至少包含
'uid'(唯一用户标识)、'iat'(签发时间)、'exp'(过期时间)、'iss' - 调用
JWT::encode($payload, $secret, 'HS256')生成字符串 Token - 响应中建议将 Token 放入 HTTP Header:
Authorization: Bearer xxx,也可同时返回 JSON 字段 - 避免在 Token 中写明文密码、手机号等敏感字段
创建中间件统一校验
新建中间件(如 app/middleware/CheckJwtToken.php),挂载到需保护的路由组:
- 从请求头
Authorization提取 Token(兼容Bearer xxx格式) - 用
JWT::decode($token, new Key($secret, 'HS256'))解析并自动校验签名、过期、签发者 - 校验成功后,把
$payload['uid']等信息绑定到 Request 或 Context,供控制器直接获取 - 失败时抛出异常或返回
401 Unauthorized,并终止后续执行
不复杂但容易忽略:Token 必须每次请求都校验,且中间件顺序要放在路由分组最外层;调试阶段可用 Postman 模拟带 Header 的请求快速验证流程是否通路。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











