我正在使用Laravel 5.5 Passport构建REST用户微服务 . 我正在使用标准的Passport :: routes(),但是我必须修改Auth :: routes以使它们返回JSON响应,并使它们与Passport一起使用 .
我已将以下行添加到routes / web.php文件中:
Route::group(['middleware' => 'auth:api'], function () {
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
});
这允许我发布https://myapi/logout
-
如果我使用 Headers "Authorization => Bearer TOKEN"进行调用,我会获得成功的注销响应 .
-
如果我没有提供任何 Headers ,我会收到"not authenticated"消息(这很好)
-
但是,如果我提供带有撤销令牌的标头,我会得到函数的递归死循环:
Illuminate\Auth\RequestGuard->user()
(它一直递归调用自身,直到堆栈溢出)
这都是在 auth:api
中间件中完成的,我的注销代码没有到达,但我的LoginController构造函数 is 被调用 . 构造函数代码:
public function __construct(Application $app)
{
$this->apiConsumer = $app->make('apiconsumer');
$this->middleware('guest')
->except('logout');
}
我很难理解这是我的代码导致这个问题,还是Laravel护照auth的某种组合 .
我的第一个想法是auth:api中间件无法验证用户,因此将用户重定向到/ home,由于某种原因,它会再次以递归方式触发 . 但如果是这种情况,为什么没有 Headers 它能正常工作?
我目前的想法是,数据库中存在有问题的令牌 does ,但是Laravel未能弄清楚它已被撤销 .
任何建议赞赏,
1 回答
经过大量研究后,我找到了答案(如果不是答案) . 看来这是一个Laravel bug(https://github.com/laravel/passport/issues/440) . 解决方案是将OAuthServerException添加到app / Exceptions / Handler.php中的$ dontReport数组:
这将避免尝试记录用户信息,从而避免死循环 .