Laravel 5.1将参数传递给具有路由组的中间件

时间:2015-08-08 00:29:22

标签: laravel laravel-routing jwt laravel-5.1

我正在尝试为我正在使用的API实现一个JWT库,并且我希望能够在少量例外的令牌检查中包装我的整个API路由组。我遇到的问题并不是JWT特有的。

在控制器构造函数中,当我应用中间件时,我能够使用此语法将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']]);
    }

当我尝试在路由组中执行相同操作时,我无法正确传递'exception'数组。这会导致authenticate方法需要一个令牌(它不需要它,因为它是检索令牌的端点)。

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

我感觉这是一个语法问题,但是我找不到其他人问这个问题并且解析器没有阻塞它,它只是不起作用。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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', 'SecretsController@index');
    });
});