讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

Laravel怎么实现JWT认证_Laravel API Token鉴权教程【无状】

夜伟小哥_7274

夜伟小哥_7274

发布时间:2026-02-20 11:57:10

|

249人浏览过

|

来源于php中文网

原创

JWT认证在Laravel中需手动配置guard、provider及token签发/解析逻辑,非开箱即用;Auth::user()在API路由中为null主因是guard未正确切换至jwt或sanctum,且api中间件组误含StartSession;token须存客户端并以Authorization: Bearer xxx格式传递,过期需结合refresh机制与黑名单校验。

laravel怎么实现jwt认证_laravel api token鉴权教程【无状】

JWT认证在Laravel里不是开箱即用的

Laravel自带的 Auth::attempt() 和 Session 认证不生成 JWT,直接装个包就以为能用 Auth::user() 拿到登录用户?大概率 401 或 null。JWT 是无状态的,得自己接管 token 的签发、解析、刷新逻辑,Laravel 的 guard 和 provider 也得重配。

常见错误现象:Call to undefined method Illuminate\Auth\RequestGuard::login()(想调 login() 却没实现)、Token has expired(没配 exp 或没刷新)、Unauthenticated(中间件没识别 Bearer 头)。

  • 别用 php artisan make:auth —— 它只配 Session,和 JWT 冲突
  • 推荐用 tymon/jwt-auth(v2.x 支持 Laravel 9+),但注意它已停止维护;更稳妥选 laravel/sanctum(适合 API + SPA)或纯手写 firebase/php-jwt(轻量、可控)
  • 如果坚持用 tymon/jwt-auth,必须运行 php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" 并手动改 config/jwt.php 中的 secret(别用默认值!)

如何让 login 接口返回 JWT 而不是跳转或 Session

默认 Auth::attempt() 只返回 bool,JWT 需要显式签发 token。关键不是“怎么登录”,而是“登录成功后怎么生成、返回、存 token”。

使用场景:APP 或前端调 /api/login,期望响应体含 {"token": "xxx"},后续请求带 Authorization: Bearer xxx。

  • 别在控制器里直接写 JWTAuth::fromUser($user) —— 如果没提前配置好 guard,会抛 JWTException
  • 先确保 config/auth.php 中 'defaults' => ['guard' => 'api'],且 'guards'['api']['driver'] 设为 jwt(用 tymon)或 sanctum(用 sanctum)
  • login 方法示例(tymon):
    use Tymon\JWTAuth\Facades\JWTAuth;
    
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');
        if (!$token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }
        return response()->json(compact('token'));
    }
  • 注意:tymon v2.x 默认不支持 refresh,如需自动续期,得加 refresh 接口并设 ttl 和 refresh_ttl(单位分钟)

为什么 Auth::user() 在 API 路由里总是 null

因为 Laravel 默认的 web guard 依赖 session cookie,而 API 请求通常没 cookie,也不走 session 启动流程。哪怕 token 正确,guard 没被正确调用,Auth::user() 就是 null。

Laravel Cloud
Laravel Cloud

Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。

下载

参数差异:Session guard 查 session_id(),JWT guard 查 Authorization header 里的 Bearer token 并解码验证签名。

  • 确认路由用了 api 中间件组:Route::middleware('api')->group(...),而不是 web
  • 检查 app/Http/Kernel.php 中 'api' 中间件组是否包含 \Illuminate\Session\Middleware\StartSession::class —— API 路由里必须删掉它,否则 session 启动会干扰 JWT 解析
  • 若用 sanctum,确保模型用了 HasApiTokens trait,且 config/sanctum.php 的 stateful 域名不含你的 API 前端(比如 localhost:5173 不该在 stateful 列表里)
  • 调试技巧:在中间件里 dump request()->header('Authorization') 和 JWTAuth::parseToken()->authenticate() 看哪步失败

token 存哪?前端怎么传?过期了怎么办

JWT 是客户端存储的凭证,服务端只校验,不保存。存错地方或传错格式,立刻 401。

性能影响:每次请求都 decode + verify signature + 检查 exp,比 session id 查 Redis 略重,但可接受;兼容性上,IE 不支持 fetch 的 headers 设置,老项目得用 XMLHttpRequest。

  • 前端存 token 推荐 localStorage(方便调试),但 XSS 风险高;更安全用 httpOnly cookie(需后端 set-cookie,且跨域要配 withCredentials: true)
  • 传 token 必须是 Authorization: Bearer <token></token>,少一个空格、多一个引号、漏 Bearer 前缀都会失败 —— 后端解析时 request()->bearerToken() 就拿不到
  • 过期处理不能只靠前端倒计时:服务端要校验 exp 字段,且建议加 nbf(not before)防重放;刷新 token 时,旧 token 应加入黑名单(tymon 提供 invalidate(),但需自己存黑名单位置)
  • 别把 refresh token 和 access token 存一起 —— refresh token 要更长 ttl、更严校验(比如绑定 user agent / IP)

最常被忽略的是:JWT 的 sub(subject)字段默认是用户 ID,但如果用户被软删除或禁用,JWTAuth::parseToken()->toUser() 仍会返回模型实例。得在 User 模型里重写 getJWTIdentifier() 或加中间件做二次校验。

热门AI工具

更多
函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

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

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

897

2024.04.09

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

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

875

2024.04.09

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

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

2528

2024.04.09

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

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

5021

2024.04.10

laravel入门教程
laravel入门教程

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

7390

2025.08.05

laravel实战教程
laravel实战教程

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

4836

2025.08.05

laravel面试题
laravel面试题

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

9069

2025.08.05

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

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

1536

2026.03.04

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 226人学习

Composer手册
Composer手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn