2015-08-08 3 views
0

Я пытаюсь реализовать библиотеку JWT для API, над которым я работаю, и я хочу, чтобы иметь возможность обертывать всю группу маршрутов API в проверки токенов с небольшим количеством исключений. Проблема, с которой я сталкиваюсь, не специфична для JWT.Laravel 5.1 Передача параметров промежуточному программному обеспечению с группами маршрутов

В конструкторе контроллера, когда я применяю промежуточное программное обеспечение, я могу использовать этот синтаксис для применения jwt.auth ко всему контроллеру и исключить конечную точку «authenticate».

public function __construct() 
    { 
     // Apply the jwt.auth middleware to all methods in this controller 
     // except for the authenticate method. We don't want to prevent 
     // the user from retrieving their token if they don't already have it 
     $this->middleware('jwt.auth', ['except' => ['authenticate']]); 
    } 

Когда я пытаюсь сделать то же самое в моей группе маршрутов я не могу получить «исключение» массив правильно передать. Это заставляет метод аутентификации требовать токен (который он не может требовать, потому что конечная точка RETRIEVE обозначает токен).

Route::group(['prefix' => 'api', 'middleware' => 'jwt.auth', 'except' => ['authenticate']], function() 
{ 
    Route::resource('authenticate', 'AuthenticateController', ['only' => ['index']]); 
    Route::post('authenticate', '[email protected]'); 
}); 

У меня есть чувство, что это проблема синтаксиса, но я не могу найти кого-нибудь еще, задавая этот вопрос, и синтаксический анализатор не подавиться, она просто не работает. Любая помощь приветствуется!

ответ

1

Я коротко посмотрел в laravel/framework, и я не видел поддержки для этого. Я бы предложил использовать вложенный Route::group что-то вроде следующего.

Route::group(['prefix' => 'api'], function() { 

    // Not explicitly behind a middleware 
    // However a controller could still have a middleware injected. 
    Route::controller('Auth/AuthController'); 

    // Authenticated Routes 
    Route::group(['middleware' => 'auth'], function() { 
     Route::get('secret', '[email protected]'); 
    }); 
}); 
+0

Ах, ладно, это должно работать нормально. Наверное, я смотрел на него наизнанку. Спасибо, что разъяснил, что один для меня! – Shane

+0

Вы забыли закрыть «[» в своей второй декларации группы – llioor

+1

Спасибо @llioor, обновлено. –