通过蒸气部署Laravel API油门问题

我已经在Vapor上部署了Laravel应用程序,并在Vue上部署了前端(基本上是通过Laravel Sanctum进行身份验证的SPA)。详细信息如下:

Laravel版本:7.11.0 PHP版本:7.4 数据库驱动程序和版本:MySQL 5.8

Laravel的默认API节流行为非常奇怪,因为在未登录时会引发“太多请求”错误。

我在Github here上添加了一个问题,泰勒(Taylor)结束了该问题,指出节流是基于IP的,适用于未登录用户。直到发现我使用该站点的网络中都没有这个错误,所以它不可能拥有相同的IP,因此不应该抛出“ Too Many Requests”(错误太多)错误时,这才是好的。

因此,我深入研究代码并发现:

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的日志放到了本地计算机上:

通过蒸气部署Laravel API油门问题

在实际的EC2实例上,它显示了以下内容:

通过蒸气部署Laravel API油门问题

到目前为止很好,但是当我在Vapor上登录时,它产生了以下内容:

通过蒸气部署Laravel API油门问题

这清楚地表明:域和IP均为空,因此所有未登录用户的签名都可能相同。

这里有人碰到其他东西吗?如果是,那出路是什么?我应该实现自己的节流中间件吗?再一次的问题是,通过Vapor部署的IP为空。

我将此问题发布在Github上,但已关闭,而我的进一步评论没有回复。

iCMS 回答:通过蒸气部署Laravel API油门问题

对于遇到此问题之后发现它的任何人:使用Vapor时,请勿使用Laravel的默认中间件进行调节。

在网站关闭5分钟后(交通繁忙的项目),我们想出了一条艰难的路。

问题?

Laravel在Symphony上使用包装器来获取用户的IP。但是,由于Vapor的设计,它似乎已被覆盖,因此仅输出127.0.0.1作为所有用户的IP,这反过来又使所有未登录用户的默认节流阀使用的签名相同。

解决方案

使用x-vapor-source-ip标头标识this answer中提到的用户IP。

Vapor的文档中没有提到它,因此邮寄了Vapor的团队对其进行了修复。

本文链接:https://www.f2er.com/2210905.html

大家都在问