0

0

Laravel如何实现基于JWT的多表认证?(深度实践)

尼克

尼克

发布时间:2026-03-10 02:13:17

|

416人浏览过

|

来源于php中文网

原创

jwt多表认证本质是多个guard共存,需为users、admins等各模型配置独立guard与provider,实现token签发、校验、黑名单隔离,并确保中间件、路由、请求头三者guard名严格一致。

laravel如何实现基于jwt的多表认证?(深度实践)

JWT 多表认证本质是多个 guard 共存,不是改一个 config 就完事

Laravel 的 JWT 认证(比如用 tymon/jwt-auth)默认只配一个 api guard,但“多表”(如 usersadminsmerchants)意味着你要让不同模型走不同 guard,各自签发、校验、刷新 token —— 这不是靠改 jwt.php 里的 user 模型路径就能解决的。

核心动作是:为每个用户类型定义独立 guard + provider,并确保每个 guard 绑定正确的 model 和 token storage 行为。

  • config/auth.php 中新增多个 guard,例如 'admin' => ['driver' => 'jwt', 'provider' => 'admins']
  • 对应新增 provider,如 'admins' => ['driver' => 'eloquent', 'model' => App\Models\Admin::class]
  • 每个 model 必须实现 JWTSubject 接口,并重写 getJWTIdentifier()getJWTCustomClaims()
  • 别漏掉 Auth::guard('admin')->login($admin) —— 不是 Auth::login($admin),后者走默认 guard

token 存储和刷新必须按 guard 隔离,否则 admin 登录会踢掉 user

JWT 默认把所有 token 都存在同一个 blacklist 表(或内存缓存),如果 adminsusers 共用一套黑名单逻辑,Auth::guard('admin')->logout() 可能误删 users 的 token,或者刷新时混用 payload 导致鉴权绕过。

根本原因是 tymon/jwt-authBlacklistManager 是单例,不感知 guard 上下文。得手动切片。

  • 在每个 model 的 getJWTCustomClaims() 中加入区分字段,如 'guard' => 'admin'
  • 重写 JWTBlacklistadd() 方法,用 $payload['guard'] 做前缀拼进 cache key 或数据库字段
  • 刷新接口(refresh)必须显式指定 guard:Auth::guard('admin')->refresh(),否则走默认
  • 中间件也要带 guard 名:middleware('auth:admin'),不能只写 auth:api

Laravel 10+ 用 laravel/jetstreamlaravel/sanctum?别混用 JWT

Jetstream 默认用 Sanctum,Sanctum 是 session + token 混合方案,不生成 JWT;强行把 tymon/jwt-auth 塞进去会导致 CSRF、跨域、token 自动续期逻辑冲突。

科大讯飞-AI虚拟主播
科大讯飞-AI虚拟主播

科大讯飞推出的移动互联网智能交互平台,为开发者免费提供:涵盖语音能力增强型SDK,一站式人机智能语音交互解决方案,专业全面的移动应用分析;

下载

如果你已经用了 Jetstream,又需要多表 JWT,最稳的路是弃用它的 auth scaffold,自己写登录/注册控制器,用原生 Auth::guard('xxx')->attempt() + createToken() 流程,不碰 HasApiTokens trait。

  • Jetstream 的 Fortify 配置项(如 features)会覆盖你自定义的 guard 行为
  • sanctumabilities 字段无法替代 JWT 的 claim 扩展能力(比如动态权限 scope)
  • 若坚持用 Sanctum 实现“多表”,只能靠 tokenable_type 字段区分模型,但它不支持多 guard 独立签发,也无法做 token 黑名单隔离

前端请求头和路由分组必须严格对齐 guard 名

后端定义了 admin guard,但前端发请求时 header 还是 Authorization: Bearer xxx,没区别;或者路由写成 Route::middleware('auth:api'),那 admin 用户永远 401。

这不是 Laravel 懒,是它设计上就要求 guard 名在三个地方完全一致:配置、中间件、请求解析上下文。

  • 登录成功后,后端返回的 token 要附带 guard 标识,比如 { "token": "...", "guard": "admin" },前端存起来并用于后续请求
  • API 路由必须按 guard 分组:Route::middleware('auth:admin')->group(...),不能全塞进 api 中间件组
  • 如果用 Nginx 或 CDN 做前置鉴权,header 名不能硬编码为 Authorization,得统一加前缀如 X-Admin-Authorization,再在中间件里提取
  • Postman 测试时,记得在 Authorization tab 选 Bearer Token,而不是 API Key 或其他类型

多表 JWT 最容易卡在“看起来都配对了,但某个 guard 死活不认 token”,八成是中间件名、config 里的 guard 键、路由声明这三者有大小写或拼写错位 —— 比如 admins vs admin,少个 s 就彻底失效。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

339

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

293

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

751

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

384

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

140

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

79

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

336

2026.03.04

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

59

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号