Laravel REST API - 无限循环

问题描述:

我正在使用Laravel 5.5 + Passport构建REST用户微服务。 我使用标准的Passport :: routes(),但我不得不修改Auth :: routes以使它们返回JSON响应,并使它们与Passport协同工作。Laravel REST API - 无限循环

我加入以下行我路/ web.php文件:

Route::group(['middleware' => 'auth:api'], function() { 
    $this->post('logout', 'Auth\[email protected]')->name('logout'); 
}); 

这让我POST https://myapi/logout

  • 如果我做其标题叫“授权=>持票人TOKEN“,我得到了一个成功的注销响应。
  • 如果我不提供头可言,我得到一个“未验证”的消息(这是好的)
  • 但是,如果我提供一个撤销令牌的头,我得到的函数的递归死循环:Illuminate\Auth\RequestGuard->user()(它让一个自称递归直到堆栈溢出)

这在auth:api中间件全部完成,没有达到我的注销代码,但我的LoginController构造调用。构造函数代码:

public function __construct(Application $app) 
    { 
     $this->apiConsumer = $app->make('apiconsumer'); 

     $this->middleware('guest') 
      ->except('logout'); 
    } 

我挣扎理解,如果是我的代码导致此问题,或Laravel +护照+ AUTH的某种组合。

我的第一个想法是,auth:api中间件无法对用户进行身份验证,并因此将用户重定向到/ home,因为某种原因,它会以递归方式再次触发。但是,如果是这种情况,为什么它没有标题正确工作?

我目前的想法是,有问题的标记确实存在于数据库中,但Laravel未能发现它已被吊销。

任何建议表示赞赏,

+0

您是否尝试通过输入'Passport :: routes();'方法来移除注销路由,并在'boot()'方法的'AuthServiceProvider.php'中的文档中声明'passport'路由? –

+0

我没有,我会手动重新实现auth注销方法吗? – mils

我找到了答案(如果不是答案)了大量的研究后。看起来这是一个Laravel错误(https://github.com/laravel/passport/issues/440)。解决的办法是OAuthServerException在app /例外/ Handler.php添加到$ dontReport阵列:

class Handler extends ExceptionHandler 
{ 
    protected $dontReport = [ 
     ... 
     \League\OAuth2\Server\Exception\OAuthServerException::class, 
    ]; 
} 

这将避免尝试登录的用户信息,从而避免了死循环。