Laravel 多授权保护​​路由多个中间件不工作

Laravel multi auth protecting route multple middleware not working

我创建了一个额外的中间件管理员,我想保护我的路由。添加一个中间件 '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'],它对管理员有效,但对用户无效。所以似乎只有数组中我的中间件的第一个元素被识别。有谁知道为什么我的多个中间件单独工作但不一起工作?感谢任何帮助

如果您试图允许多个 'guards' 检查路由,您可以将多个守卫作为参数传递给 Authenticate 中间件 auth

auth:web,admin(假设 web 是你的默认守卫)。

这将尝试从传入的每个守卫中解析一个用户 (Authenticatable)。如果任何守卫 returns 一个用户 (Authenticatable) 您通过了身份验证。如果不是你是客人。

如果您设置中间件 authauth:admin 它们在堆栈中是 2 个独立的 'middleware' 不相关。

Route::get('/information', ['middleware' => ['auth', 'auth:admin'],function () {
    return view('app', ['data' => ['auth' => Auth::check()]]);
}]);

在此代码中。 ['auth', 'auth:admin'] 这意味着您需要登录 default guard 和 admin guard。如果你只需要登录admin guard,['auth:admin']