Laravel多重身份验证保护路由多个中间件不起作用

时间:2018-08-13 08:28:18

标签: laravel authentication routes middleware

我创建了一个额外的中间件管理员,我想保护自己的路线。添加单个中间件'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,但不适用于用户。因此,似乎只有我的中间件数组中的第一个元素被识别。有人知道为什么我的多个中间件是分开工作而不是一起工作吗?感谢您的帮助

2 个答案:

答案 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),您将通过身份验证。如果不是,那么您是客人。

如果设置中间件authauth:admin,则它们是堆栈中不相关的2个单独的“中间件”。