gpt4 book ai didi

php - Laravel REST API - 无限循环

转载 作者:搜寻专家 更新时间:2023-10-31 21:49:23 25 4
gpt4 key购买 nike

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

  • 如果我使用 header “Authorization => Bearer TOKEN”进行调用,我会收到成功的注销响应。
  • 如果我根本不提供 header ,我会收到一条“未通过身份验证”的消息(这很好)
  • 但是,如果我为 header 提供已撤销的 token ,我会得到函数的递归死循环: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,由于某种原因它再次被递归触发。但如果是这样的话,为什么它可以在没有标题的情况下正常工作?

我目前的想法是,有问题的 token 确实存在于数据库中,但 Laravel 无法弄清楚它已被撤销。

任何建议表示赞赏,

最佳答案

经过大量研究,我找到了答案(如果不是答案)。看起来这是一个 Laravel 错误(https://github.com/laravel/passport/issues/440)。解决方法是在app/Exceptions/Handler.php中的$dontReport数组中添加OAuthServerException:

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

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

关于php - Laravel REST API - 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46638372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com