Composer怎么安装JWT-Auth库 API接口Token认证教程【实操】

10次阅读

tymon/jwt-auth 在 laravel 9+ 失败,因其最后稳定版 v1.0.2 不兼容 php 8.1+ 类型系统与已移除的 booting() 钩子,导致服务提供者未找到、命令不存在等错误;官方推荐改用 Laravel Sanctum。

Composer怎么安装JWT-Auth库 API接口Token认证教程【实操】

JWT-Auth 库(tymon/jwt-auth)在 Laravel 5.5–8.x 中可用,但 Laravel 9+ 官方已弃用并停止维护,直接安装会报错或无法注册服务提供者。

为什么 composer require tymon/jwt-auth 在 Laravel 9+ 失败?

Laravel 9 起强制要求 PHP 8.0+,而 tymon/jwt-auth 最后稳定版(v1.0.2)未完全适配 PHP 8.1+ 的类型系统和反射变更;其 JWTAuthServiceProvider 依赖已被 Laravel 移除的 IlluminateSupportServiceProvider::booting() 钩子。

常见错误包括:

  • class "TymonJWTAuthProvidersLaravelServiceProvider" not found
  • Target class [jwt.auth] does not exist
  • 执行 php artisan jwt:secret 报错:Command not found

Laravel 9+ 推荐替代方案:使用 laravel/jetstream + laravel/sanctum

Sanctum 是 Laravel 官方维护的轻量 Token 认证方案,专为 SPA、移动端 API 设计,支持 Token 模型绑定、过期控制、多设备登录,且与 Laravel 9/10/11 兼容性零问题。

实操步骤:

  • 运行 composer require laravel/sanctum
  • 执行 php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
  • 运行 php artisan migrate(生成 personal_access_tokens 表)
  • app/Models/User.php 中添加 use LaravelSanctumHasApiTokens; 并混入 HasApiTokens
  • API 登录示例:用户验证后调用 $user->createToken('api-token')->plainTextToken

注意:sanctum 默认不处理刷新 Token,如需类似 JWT 的 refresh 流程,得自行实现或改用 spatie/laravel-permission + 自定义中间件组合。

非要继续用 tymon/jwt-auth?只能降级或找 fork 版

若项目强依赖 JWT 的无状态刷新机制,且无法重构,可考虑以下路径(不推荐新项目):

  • 锁定 Laravel 8.75 + PHP 7.4–8.0,并安装 tymon/jwt-auth:^1.0
  • 或尝试社区维护的 fork,如 php-jwt-auth/jwt-auth(非官方,需手动测试兼容性)
  • 手动注册服务提供者时,必须重写 boot() 方法,避免调用已移除的 booting()
  • config/jwt.php 中的 secret 不再通过 php artisan jwt:secret 生成,需用 base64_encode(random_bytes(32)) 手动生成并填入

JWT 的密钥轮换、黑名单位置、跨域 Token 存储方式这些细节,在 Laravel 9+ 环境下容易被默认配置掩盖,实际部署时比 Sanctum 更易出错。

text=ZqhQzanResources