如何在laravel中指定多个经过身份验证的防护

时间:2016-05-28 05:52:57

标签: php laravel authentication guard

我正在阅读laravel网站https://laravel.com/docs/5.2/authentication

中的身份验证部分

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

  

访问特定防护实例

     

您可以指定要使用的防护实例    Auth 外观上的后卫方法。这允许您管理   使用完全认证您的应用程序的单独部分   单独的可验证模型或用户表。

     

传递给后卫方法的后卫名称应该对应于其中一个   在 auth.php 配置文件中配置的防护:

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

2 个答案:

答案 0 :(得分:3)

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

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,您应该是好的。

答案 1 :(得分:0)

如果您有更多的中间件,并且您想要应用多个防护,我的意思是中间件,您可以在任何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);
}