我的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响应。
我如何解决这个问题?
答案 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());
});