2017-10-09 49 views
2

我正在使用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

回答

0

我找到了答案(如果不是答案)了大量的研究後。看起來這是一個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, 
    ]; 
} 

這將避免嘗試登錄的用戶信息,從而避免了死循環。