基于Laravel 多个中间件的执行顺序详解

2025-05-27 0 41

问题

一个路由需要用到多个中间件,其中一个是 Laravel 自带的 auth 中间件

发现这个中间件不管放在哪里,总是在自定义中间件之前执行。

如果业务需要自定义中间在 auth 之前执行,还是有办法的。

解决方案

观察定义中间件的 app\\Http\\Kernel 类,是继承的 Illuminate\\Foundation\\Http\\Kernel 类。

再打开 Illuminate\\Foundation\\Http\\Kernel ,发现有这样一个数组

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
...

/**

* The priority-sorted list of middleware.

*

* Forces the listed middleware to always be in the given order.

*

* @var array

*/

protected $middlewarePriority = [

\\Illuminate\\Session\\Middleware\\StartSession::class,

\\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,

\\Illuminate\\Auth\\Middleware\\Authenticate::class,

\\Illuminate\\Session\\Middleware\\AuthenticateSession::class,

\\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,

\\Illuminate\\Auth\\Middleware\\Authorize::class,

];

...

注释里写得比较清楚了:列表中的中间件会按照顺序优先在其他中间件之前执行。

那么需要自定义中间件在 auth 之前执行,只需要在 app\\Http\\Kernel 重载这个数组就行了。

auth 中间件对应的类 \\Illuminate\\Auth\\Middleware\\Authenticate,

将自定义中间件 \\App\\Http\\Middleware\\CustomMiddelware 放到这个前面就可以了:

?

1

2

3

4

5

6

7

8

9

10

11

12

13
...

protected $middlewarePriority = [

\\Illuminate\\Session\\Middleware\\StartSession::class,

\\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,

\\App\\Http\\Middleware\\CustomMiddelware::class,

\\Illuminate\\Auth\\Middleware\\Authenticate::class,

\\Illuminate\\Session\\Middleware\\AuthenticateSession::class,

\\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,

\\Illuminate\\Auth\\Middleware\\Authorize::class,

];

...

拓展

不在 $middlewarePriority 列表中的中间件,是按照在路由配置里调用的顺序来的:

在 Route::group 里定义的,先执行外层,后执行内层

在数组定义的,先执行写在数组前面的,后执行写在数组后面的

举例:

?

1

2

3

4

5

6

7

8

9
Route::group(['middleware' => 'outer'], function () {

Route::group(['middleware' => 'inner'], function () {

Route::group(['middleware' => ['array1', 'array2', 'auth:api']], function () {

Route::get('test', function () {

return;

});

});

});

});

这里就是按照 outer 、 inner 、 array1 、 array2 的顺序执行。

以上这篇基于Laravel 多个中间件执行顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/realghost/article/details/80969253

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 基于Laravel 多个中间件的执行顺序详解 https://www.kuaiidc.com/70885.html

相关文章

发表评论
暂无评论