我创建了一个额外的中间件管理员,我想保护自己的路线。添加单个中间件'auth'或'auth:admin'是可行的。
Route::get('/calendar', function () {
return view('app', ['data' => []);
})->middleware('auth');
但是我希望作为管理员,您也可以访问用户路由,但这不起作用。如果尝试以下操作,并且以管理员身份登录,则始终会重定向到登录页面。
Route::get('/information', ['middleware' => ['auth', 'auth:admin'], function () {
return view('app', ['data' => ['auth' => Auth::check()]]);
}]);
但是,如果我将['auth','auth:admin']更改为['auth:admin','auth'],则适用于admin,但不适用于用户。因此,似乎只有我的中间件数组中的第一个元素被识别。有人知道为什么我的多个中间件是分开工作而不是一起工作吗?感谢您的帮助
答案 0 :(得分:1)
Route::get('/information', ['middleware' => ['auth', 'auth:admin'],function () {
return view('app', ['data' => ['auth' => Auth::check()]]);
}]);
在此代码中。 ['auth', 'auth:admin']
表示您需要登录默认防护和管理员防护。如果只需要登录管理员,['auth:admin']
答案 1 :(得分:0)
如果您试图允许检查多个“守卫”的路由,则可以将多个守卫作为参数传递给Authenticate
中间件auth
。
auth:web,admin
(假设web
是您的默认保护)。
这将尝试从传入的每个防护中解析用户(Authenticatable
)。如果任何防护返回了用户(Authenticatable
),您将通过身份验证。如果不是,那么您是客人。
如果设置中间件auth
和auth:admin
,则它们是堆栈中不相关的2个单独的“中间件”。