2016-01-04 269 views
0

我有一個路由組中我routes.php文件,像這樣指定的中間件:Laravel 5全球中間件不工作

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響應。

我該如何克服這個問題?

回答

0

您是否記得將Authorizer添加到aliases數組?

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

因爲你使用它:

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

是的。我按照指示一步一步。 –

+0

也許你錯過了'Throttle'庫?我不知道,因爲我沒有用過它。你能發佈更多關於錯誤的信息嗎? – soutoner

1

這樣做的原因是由於與Laravel是如何從5.2.7處理異常在中間件起,在this ticket I raised記錄的變更。要解決這個問題,你需要修改你的異常處理程序(正如問題中所解釋的)或者等待包中的最新補丁。

我有commmitted a fix to the repository它修復了對Laravel 5.2所做更改的問題,但尚未合併。