我正在使用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
Illuminate\Auth\RequestGuard->user()
(它会一直递归调用自己直到堆栈溢出)这一切都在auth:api
中间件中完成,我的注销代码未到达,但我的LoginController构造函数被调用。构造函数代码:
public function __construct(Application $app)
{
$this->apiConsumer = $app->make('apiconsumer');
$this->middleware('guest')
->except('logout');
}
我很难理解这是导致此问题的代码,还是Laravel + passport + auth的某种组合。
我首先想到的是auth:api中间件无法对用户进行身份验证,因此会将用户重定向到/ home,由于某种原因,它会再次以递归方式触发。但如果是这种情况,为什么没有标题它能正常工作?
我目前的想法是,数据库中存在确实的令牌,但是Laravel未能弄清楚它已被撤销。
任何建议表示赞赏,
答案 0 :(得分:0)
经过大量研究后,我找到了答案(如果不是 答案)。看来这是一个Laravel bug(https://github.com/laravel/passport/issues/440)。解决方案是将OAuthServerException添加到app / Exceptions / Handler.php中的$ dontReport数组中:
class Handler extends ExceptionHandler
{
protected $dontReport = [
...
\League\OAuth2\Server\Exception\OAuthServerException::class,
];
}
这将避免尝试记录用户信息,从而避免死循环。
答案 1 :(得分:0)
我在localhost遇到了这个问题。就我而言,我已经使用过xampp服务器并面临此问题 创建像“ testlarave.test”这样的虚拟主机后,解决错误