不止一个守卫在路上

时间:2016-09-07 12:08:30

标签: php laravel laravel-5.2 laravel-routing

我使用laravel框架我想在我的路线中使用多个后卫,如:

   Route::group([ 'middleware' => 'jwt.auth', 'guard' => ['biker','customer','operator']], function () {}

我在AuthServiceProvider.php中有一个脚本,如下面的启动部分所示:

  $this->app['router']->matched(function (\Illuminate\Routing\Events\RouteMatched $event) {
        $route = $event->route;
        if (!array_has($route->getAction(), 'guard')) {
            return;
        }
        $routeGuard = array_get($route->getAction(), 'guard');
        $this->app['auth']->resolveUsersUsing(function ($guard = null) use ($routeGuard) {
            return $this->app['auth']->guard($routeGuard)->user();
        });
        $this->app['auth']->setDefaultDriver($routeGuard);
    });

'guard'=>'biker'的路线上只有一名后卫工作 那么如何更改AuthServiceProvider.php中的代码以在路由中使用多个gaurd

1 个答案:

答案 0 :(得分:5)

我知道这是一个老问题,但我刚刚解决了这个问题并想出了如何自己解决这个问题。这可能对其他人有用。解决方案非常简单,您只需在中间件名称后用逗号分隔后指定每个防护,如下所示:

Route::group(['middleware' => ['auth:biker,customer,operator'], function() {
    // ...
});

然后将警卫发送到\Illuminate\Auth\Middleware\Authenticate函数authenticate(array $guards),它会检查阵列中提供的每个守卫。

这适用于Laravel 5.4。