Laravel 5全球中间件无法正常工作

时间:2016-01-04 11:15:46

标签: php laravel-5 laravel-routing laravel-middleware

我的routes.php文件中有一个路由组,其中间件指定如下:

Route::group(['prefix' => 'api', 'middleware' => 'api'], function() {
    Route::post('oauth/access_token', function() {
        return Response::json(Authorizer::issueAccessToken());
    });
}

我正在使用Lucadegasperi Oauth2 Server插件。对于它的设置,我必须在$middleware文件的Kernel.php数组(内核类)中输入以下LucaDegasperi项:

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \LucaDegasperi\OAuth2Server\Middleware\OAuthExceptionHandlerMiddleware::class,
    ];

同一类的$middlewareGroups数组如下:

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
        ],
    ];

OAuthExceptionHandlerMiddleware的作用是将JSON响应的异常格式化。现在,当我在路由组中应用'middleware' => 'api'时,如图所示,全局中间件不起作用。我可以这么说,因为HTML错误页面会显示异常发生的时间。但是,当我省略路由组中的'middleware' => 'api'时,全局中间件可以工作,我会收到错误的JSON响应。

我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这是因为Laravel从5.2.7开始处理中间件异常的方式发生了变化,如this ticket I raised中所述。要解决此问题,您需要更改您的异常处理程序(如问题中所述)或等待程序包中的最新修补程序。

commmitted a fix to the repository解决了对Laravel 5.2所做更改的问题,但尚未合并。

答案 1 :(得分:0)

您是否记得将Authorizer添加到aliases数组?

'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,

因为您正在使用它:

Route::post('oauth/access_token', function() {
    return Response::json(Authorizer::issueAccessToken());
});