laravel 中间件执行顺序在遇到 auth:api 后被打乱是怎么回事??

以下代码:

Route::middleware(['cross' , 'options', 'auth:api'])->group(function(){
    Route::match(['get' , 'post' , 'options'] , 'test/oauth' , 'Test@oauth');
});

正常我认为的中间执行顺序:cross -> options -> auth:api,可是这边很坑爹!!实际执行顺序:auth:api -> cross -> options!!简直把我坑惨了,请问为什么 auth 中间件会被优先执行??

如何让他按照我的意图按顺序执行??(cross -> options -> auth:api

阅读 4.3k
1 个回答

Laravel提供了中间件优先级, 这是默认的中间件优先级, 其它的都要排在它们后面

//illuminate/Foundation/Http/kernel.php
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,
];

你可以在App/Http/Kernel.php中自定义你的优先级:

protected $middlewarePriority = [
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\Cross::class,
    \App\Http\Middleware\Options::class,
    \Illuminate\Auth\Middleware\Authenticate::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \Illuminate\Auth\Middleware\Authorize::class,
];
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题