【问题标题】:how to specify more than one authenticated guard in laravel如何在 laravel 中指定多个经过身份验证的守卫
【发布时间】:2016-09-26 12:20:37
【问题描述】:

我正在阅读 laravel 网站 https://laravel.com/docs/5.2/authentication 的身份验证部分

任何人都可以解释我如何做到这一点,就像文档解释的那样,指定单独的表进行身份验证...我将引用 laravel 如下:

访问特定的 Guard 实例

您可以指定要使用的保护实例 Auth 门面上的 guard 方法。这允许您管理 完全使用应用程序的不同部分进行身份验证 单独的可验证模型或用户表。

传递给 guard 方法的警卫名称应对应于以下之一 auth.php 配置文件中配置的守卫:

if (Auth::guard('admin')->attempt($credentials)) {
    //
}

【问题讨论】:

    标签: php laravel authentication guard


    【解决方案1】:

    您必须阅读添加自定义保护和提供程序的示例,主要是配置部分。您可以使用相同的身份验证“驱动程序”,您只是想调整身份验证用户提供程序使用的模型。

    config/auth.php

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        // add another one
        // use the same driver, 'session', but a different user provider
        'admin' => [
             'driver' => 'session',
             'provider' => 'admins',
         ],
    ],
    
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        // add a provider using Eloquent but using a different model
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],
    ]
    

    那么你应该可以指定守卫admin 来进行Auth。只要 Admin 模型实现 Authenticatable 并且您在 Auth 上将适当的凭据传递给 attempt,您就应该很好。

    【讨论】:

    • 非常感谢 :) @lagbox ,,, 我会按照你所说的那样试试这个,让你知道,祝你有美好的一天
    【解决方案2】:

    如果你有更多的中间件,并且你想应用多个保护,我的意思是中间件,你可以在任何 Middleware.php 文件中执行此操作:

    public function handle($request, Closure $next)
    {
        // if a user is Agency or Admin, let him through
        if (Auth::user()->isAgency() || Auth::user()->isAdmin()) {
            return $next($request);
        } 
        // else show error page
        abort(403);
    }
    

    【讨论】:

    • 本例中只使用了一个守卫,默认值。
    • 好的。 ..只是想贡献
    • 没问题,我经常使用 admin 的方法只是作为用户表上的标志,而不是单独的表,这个示例设置很适合 :-)
    • 嗯......我的问题的想法是手动实现身份验证,我不想在这里嵌套问题,但我按照你提到的那样做了,并添加了“auth”中间件到我的路由,但它让我再次登录,我调试它,我看到我传递给 auth 中间件的守卫是空的?关于 @ lagbox 的任何想法
    • 您需要在模型中同时创建函数 isAdmin() 和 isAgency()
    猜你喜欢
    • 2018-11-21
    • 2021-05-01
    • 2018-05-12
    • 2020-05-25
    • 2017-11-23
    • 2019-04-10
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多