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
) 您通过了身份验证。如果不是你是客人。
如果您设置中间件 auth
和 auth: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']
我创建了一个额外的中间件管理员,我想保护我的路由。添加一个中间件 '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
) 您通过了身份验证。如果不是你是客人。
如果您设置中间件 auth
和 auth: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']