我在 Vapor 上部署了一个 Laravel 应用程序,前端在 Vue 上(基本上是一个通过 Laravel Sanctum 进行身份验证的 SPA)。详情如下:
Laravel 版本:7.11.0 PHP 版本:7.4 数据库驱动和版本:MySQL 5.8
Laravel 默认 API 限制的行为非常奇怪,因为它在未登录时会抛出“Too Many Requests”错误。
我在 Github 上添加了这个问题, Taylor 关闭了该问题,指出节流是基于 IP 对未登录用户起作用的。这很好,直到当我收到使用该站点的网络中没有的错误时,它不可能拥有相同的 IP,因此不应该抛出“请求过多”错误。
所以我潜入代码并发现:
protected function resolveRequestSignature($request)
{
if ($user = $request->user()) {
return sha1($user->getAuthIdentifier());
}
if ($route = $request->route()) {
return sha1($route->getDomain().'|'.$request->ip());
}
throw new RuntimeException('Unable to generate the request signature. Route unavailable.');
}
上述代码用于根据域和 IP 解析签名。
因此,为了调试,我将域和 IP 的日志放在我的本地计算机上:
在实际的 EC2 实例上,它显示了这一点:
到目前为止很好,但是当我将它登录到 Vapor 时,它产生了以下结果:
这清楚地表明:域和 IP 都是空的,因此所有未登录用户的签名可能相同。
这是其他人在这里面临的吗?如果是的话,出路是什么?我应该实现自己的油门中间件吗?然后问题再次是通过 Vapor 部署时的 IP 为空。
我将此作为问题发布在 Github 上,但它已关闭,并且没有回复我的进一步评论。