【问题标题】:Laravel multi auth protecting route multple middleware not workingLaravel 多重身份验证保护路由多个中间件不起作用
【发布时间】: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'] 它适用于管理员,但不适用于用户。所以似乎只有我的中间件在数组中的第一个元素被识别。有谁知道为什么我的多个中间件单独工作而不是一起工作?任何帮助表示赞赏

【问题讨论】:

  • 您的自定义中间件是什么样的?还是你的意思是警卫?
  • 您似乎在“中间件”属性上缺少一个结束“]”
  • 打错字了

标签: laravel authentication routes middleware


【解决方案1】:

如果您尝试允许检查多个“守卫”的路线,您可以将多个守卫作为参数传递给Authenticate 中间件auth

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

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

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

【讨论】:

  • 谢谢!这正是我想要的。
【解决方案2】:
Route::get('/information', ['middleware' => ['auth', 'auth:admin'],function () {
    return view('app', ['data' => ['auth' => Auth::check()]]);
}]);

在这段代码中。 ['auth', 'auth:admin'] 这意味着您需要登录默认保护和管理员保护。如果您只需要登录管理员保护,['auth:admin']

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2021-04-21
    • 2020-05-10
    • 1970-01-01
    • 2016-04-28
    • 2017-01-07
    • 2020-08-02
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多