0

0

Laravel中间件高频使用场景有哪些_Laravel中间件高频场景的介绍【介绍】

星夢妙者

星夢妙者

发布时间:2026-03-11 01:23:20

|

323人浏览过

|

来源于php中文网

原创

laravel中间件是路由安全与逻辑解耦的实际防线,核心用于权限控制、登录校验、请求过滤和日志记录;auth中间件不可直接用于api路由因其默认依赖session的web guard,api应使用auth:sanctum或auth:api并确保token头正确;role中间件需校验用户存在并用explode+contains支持多角色or判断;日志中间件须在$next()后计算耗时并交由log::info异步写入;throttle限流依赖缓存驱动(如redis),键含ip与路由签名,ttl为参数二×60秒;本地file缓存易因文件锁导致限流不准,上线须切redis。

laravel中间件高频使用场景有哪些_laravel中间件高频场景的介绍【介绍】

Laravel中间件最常用于权限控制、登录校验、请求过滤和日志记录这四类场景,不是“可有可无的装饰”,而是路由安全与逻辑解耦的实际防线。

auth 中间件为什么不能直接用在 API 路由上?

因为 auth 默认走的是 web guard(依赖 session),而 API 请求通常无 Cookie、不维持会话。直接套用会导致始终跳转登录页或报 302,而非返回 JSON 错误。

  • API 场景应改用 auth:sanctumauth:api,并在 config/auth.php 中确认对应 guard 的 driver 和 provider 配置正确
  • 若用 Laravel Sanctum,需确保请求携带有效的 Authorization: Bearer {token} 头,且前端已设置 withCredentials: false
  • 常见错误现象:419 Page Expired(误配 web guard)、Unauthenticated(token 过期或 header 缺失)、302 Found(被重定向到 login)

role:admin,editor 这种带参数的中间件怎么写才不漏权限?

参数传递本身简单,但容易在角色判断逻辑里漏掉“多角色 OR 关系”或忽略空用户场景。

Notion Sites
Notion Sites

Notion 推出的AI网站构建工具,允许用户将 Notion 页面直接发布为完整网站。

下载
  • handle() 方法必须显式检查 $request->user() 是否存在,否则未登录时调用 hasRole() 会抛 Call to a member function hasRole() on null
  • 参数接收要匹配数量:定义为 handle($request, $next, $roles),路由中写 middleware('role:admin,editor'),Laravel 会自动把字符串按逗号拆成数组传入
  • 推荐用 Str::of($roles)->explode(',')->contains(...)in_array() 做判断,避免硬编码 if ($role === 'admin' || $role === 'editor') —— 后者无法支持多参数动态扩展

日志中间件为什么总记不到响应时间?

因为只在请求进入时打点,没在响应返回后读取耗时,或者用了同步写文件导致阻塞主线程。

  • 必须在 $next($request) 之后获取响应,再计算耗时,例如:$start = microtime(true); $response = $next($request); $duration = round((microtime(true) - $start) * 1000);
  • 别在中间件里直接 file_put_contents() 写日志——高并发下易锁死;应交由 Laravel 日志通道(如 Log::info())异步处理
  • 注意:如果中间件注册在全局 $middleware 数组,它会记录所有请求(包括 favicon.ico、/storage/* 等),建议改用路由级中间件或加路径白名单判断

throttle:60,1 是怎么算出“每分钟最多 60 次”的?

这个计数不是靠 PHP 进程内变量,而是依赖缓存驱动(默认是 file 或 redis),底层用的是 Laravel 的 RateLimiter 服务,键名含 IP + 路由签名。

  • 参数 60,1 表示“60 次 / 1 分钟”,单位固定为分钟;写成 120,2 效果等同,但不推荐——解析逻辑只认第二个值为“分钟数”
  • 若用 redis 驱动,限流键类似 rate_limit:ip:192.168.1.100:dashboard,TTL 就是第二个参数 × 60 秒
  • 容易踩的坑:本地开发用 file 缓存时,多个 PHP-FPM 进程可能因文件锁竞争导致限流不准;上线务必切到 redis

中间件真正难的不是写 handle 方法,而是理清它在整个洋葱模型里的执行顺序、何时该用 terminate、以及参数和上下文在 pipeline 中如何流转——这些细节一旦错位,问题就藏得深、复现难。

热门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的相关内容,可以阅读本专题下面的文章。

771

2024.04.09

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

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

385

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 后端服务体系。

388

2026.03.04

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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号