Laravel 多重身份验证保护路由多个中间件不起作用
Posted
技术标签:
【中文标题】Laravel 多重身份验证保护路由多个中间件不起作用【英文标题】:Laravel multi auth protecting route multple middleware not working 【发布时间】:2019-01-19 22:27:41 【问题描述】:我创建了一个额外的中间件管理员,我想保护我的路由。添加一个中间件 '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'] 它适用于管理员,但不适用于用户。所以似乎只有我的中间件在数组中的第一个元素被识别。有谁知道为什么我的多个中间件单独工作而不是一起工作?任何帮助表示赞赏
【问题讨论】:
您的自定义中间件是什么样的?还是你的意思是警卫? 您似乎在“中间件”属性上缺少一个结束“]” 打错字了 【参考方案1】:如果您尝试允许检查多个“守卫”的路线,您可以将多个守卫作为参数传递给Authenticate
中间件auth
。
auth:web,admin
(假设web
是您的默认守卫)。
这将尝试从每个传入的守卫中解析用户 (Authenticatable
)。如果任何守卫返回用户 (Authenticatable
),则您通过身份验证。如果不是,你就是客人。
如果您设置了中间件 auth
和 auth:admin
,它们是堆栈中不相关的 2 个独立“中间件”。
【讨论】:
谢谢!这正是我想要的。【参考方案2】:Route::get('/information', ['middleware' => ['auth', 'auth:admin'],function ()
return view('app', ['data' => ['auth' => Auth::check()]]);
]);
在这段代码中。 ['auth', 'auth:admin']
这意味着您需要登录默认保护和管理员保护。如果您只需要登录管理员保护,['auth:admin']
【讨论】:
以上是关于Laravel 多重身份验证保护路由多个中间件不起作用的主要内容,如果未能解决你的问题,请参考以下文章