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未能发现它已被吊销。
任何建议表示赞赏,
答
我找到了答案(如果不是的答案)了大量的研究后。看起来这是一个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,
];
}
这将避免尝试登录的用户信息,从而避免了死循环。
您是否尝试通过输入'Passport :: routes();'方法来移除注销路由,并在'boot()'方法的'AuthServiceProvider.php'中的文档中声明'passport'路由? –
我没有,我会手动重新实现auth注销方法吗? – mils