为什么要将中间件注册在 StartSession 之后?

为什么要将中间件注册在StartSession之后?

教材里说要把自建的EnsureEmailIsVerified注册在StartSession之后,请问原理是什么呢?
我试了一下把顺序倒过来,结果是不用验证邮件就直接登录了。
请问这里面的区别是什么?为什么顺序会造成不同的结果?
谢谢!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
Summer
最佳答案

问得好。StartSession 顾名思义:启动会话,也就是处理程序启动时,用户认证相关的逻辑。如果中间件放在其前面,就会出现使用 $request->user() 判断永远都是 false 的情况。

你可以试试看

4年前 评论
讨论数量: 3
Summer

问得好。StartSession 顾名思义:启动会话,也就是处理程序启动时,用户认证相关的逻辑。如果中间件放在其前面,就会出现使用 $request->user() 判断永远都是 false 的情况。

你可以试试看

4年前 评论
Summer

问得好。StartSession 顾名思义:启动会话,也就是处理程序启动时,用户认证相关的逻辑。如果中间件放在其前面,就会出现使用 $request->user() 判断永远都是 false 的情况。

你可以试试看

4年前 评论

@Summer
大概明白了,等于自定义的中间件永远被跳过去了。
还有个问题,就是中间件的执行顺利是在哪里定义的?
教程里的意思,好像是在$middlewareGroups里定义的,我试了也确实如此。
但是我看另一个帖子:
博客:Laravel 多个中间件的执行顺序
说:

file
这个是不是不对?
首先注释里的英文没有这个意思。注释只说列表里的中间件按这个顺序执行,没说它们会在列表“以外”的的中间件之前执行。
其次,如果这个是对的,那么教程里强调的$middlewareGroups的顺序就变得无所谓了,因为StartSession 永远先执行。
请问哪个是正确的?
谢谢·~

4年前 评论
Summer 4年前
Summer

两位争论的评论没什么价值,我都删了哦。

@holyLight 可以写篇博客分享下「Laravel 中间件的执行顺序」,包括对源码的分析那块,以解其他同学之惑

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!