php - Laravel 中间件执行顺序不正确
问题描述
我有一个仅用于 ajax 路由的中间件。
// AjaxOnly Middleware class
public function handle($request, Closure $next)
{
if (!$request->ajax()) {
// dd('I\'m (condition) working as expected!');
return response()->view('layouts.app');
}
dd('I never work!');
return $next($request);
}
这是我的路线 web.php
// Ajax only routes
Route::group(['middleware' => 'ajaxOnly'], function () {
// Work an print 'false'
// dd(Request::ajax());
// Redirect me to /login page
Route::group(['middleware' => ['auth:user']], function () {
Route::get('/', 'HomeController@index')->name('home');
});
// Authentication routes
Auth::routes();
});
那么,有人可以解释为什么代码继续在受中间件保护的闭包中运行吗?谢谢。
UPD:只是澄清 -
- 预期行为:我的浏览器中的 layouts.app。
- 真实行为:重定向到登录页面。
解决方案
您可以调整中间件优先级以确保正确的中间件以正确的顺序执行。您可以通过覆盖文件$middlewarePriority
中的默认值来实现此目的Kernel.php
。
/**
* The priority-sorted list of middleware.
*
* Forces the listed middleware to always be in the given order.
*
* @var array
*/
protected $middlewarePriority = [
\Illuminate\xxx\Middleware\AjaxOnly::class,
\Illuminate\xxx\Middleware\Auth::class,
];
您可以在源代码中Illuminate\Routing\Router
按照$middlewarePriorty
此处的操作进行操作。
推荐阅读
- unity3d - 如何停止在我的游戏中播放无缝音乐
- javascript - 在进入我指定的特定位置的每个 android 手机上弹出
- typeahead.js - Typeahead JS“总是使用远程”
- javascript - 未捕获的 ReferenceError:未定义 showimg
- http - HTTP 文本有效负载的内容长度的正确值
- c# - BouncyCastle 时间戳协议 | 如何从 TimeStampToken 获取原始哈希?
- reactjs - 如何将componentDidMount函数传递给React中的深层子级
- neo4j - 如何在 Neo4j 节点中显示特定属性
- r - 可以在 R 中读取 .wma 声音文件吗?
- c++ - g++ 内联调用 always_inline "int _rdrand16_step()" 失败