2016-09-07 1 views
2

Я использую рамку 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 в маршруте

+0

Я не думаю, что Laravel позволяет несколько охранников на маршруте. Вероятно, вам нужно переосмыслить свою стратегию на основе этого (т. Е. Один охранник и достичь этой функциональности с помощью промежуточного программного обеспечения) – apokryfos

+0

, потому что у меня есть 3 защитника в моем 'auth.php', а laravel не может установить multi guard по умолчанию, и когда я запускаю api с jwt, чтобы проанализировать этот токен, чтобы узнать, какой запрошенный тип пользователя показывает мне «user_not_found», потому что это 3 модели для пользователей, и я не знаю, как обрабатывать пользователей с помощью нескольких моделей. – amirali

+0

Проблема в том, что то, что вы делаете, не является стандартная вещь, чтобы сделать это, Laravel не может справиться с этим из коробки, поэтому я предложил вам переключиться на стандартный способ делать что-то, например, с одной пользовательской моделью, с одним охранником и с различными проверками типа пользователя через промежуточное программное обеспечение. В противном случае вам придется в основном переписать свои собственные драйверы аутентификации и охранники. – apokryfos

ответ

2

Я знаю, что это старый вопрос, но я только что прошел через эту проблему и понял, как решить ее сам. Это может быть полезно для кого-то другого. Решение очень просто, вы просто должны указать каждый охранник после имени вашего промежуточного слоя, разделенных запятыми, как это:

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

Охранников затем направляются \Illuminate\Auth\Middleware\Authenticate функции authenticate(array $guards), которая проверяет каждый охранник представленный в массиве.

Это работает для Laravel 5.4.

Смежные вопросы