Laravel:Auth Middleware中的多重卫士

时间:2016-11-18 06:32:50

标签: php laravel

我有一个使用多用户表的Laravel应用程序用于不同的角色。

我添加了2个这样的自定义守卫:

'guards' => [
    'consumer' => [
        'driver' => 'session',
        'provider' => 'consumer',
    ],
    'member' => [
        'driver' => 'session',
        'provider' => 'member',
    ]
]

我想与消费者和会员分享同一条路线。但我不知道Laravel如何将警卫名称传递给Auth中间件。

查看文件Illuminate\Auth\Middleware\Authenticate

protected function authenticate(array $guards)
{
    if (empty($guards)) {
        return $this->auth->authenticate();
    }

    foreach ($guards as $guard) {
        if ($this->auth->guard($guard)->check()) {
            return $this->auth->shouldUse($guard);
        }
    }

    throw new AuthenticationException('Unauthenticated.', $guards);
}

如果我可以将2个自定义守卫传递给$ guards变量,它可以共享自定义和用户之间的路由。但我不知道如何通过后卫的名字

2 个答案:

答案 0 :(得分:4)

你可以用逗号传递守卫,例如:

    Route::group(['middleware' => ['auth:comsumer, member'] ], function(){
        Route::get('/home', 'HomeController@index');
    });

答案 1 :(得分:0)

在定义路线组时,请执行以下操作:

Route::group(['middleware' => 'auth:guard_name'], function () {
    //Your Route goes here
}

希望能解决你的问题。