我已经在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的日志放到了本地计算机上:
在实际的EC2实例上,它显示了以下内容:
到目前为止很好,但是当我在Vapor上登录时,它产生了以下内容:
这清楚地表明:域和IP均为空,因此所有未登录用户的签名都可能相同。
这里有人碰到其他东西吗?如果是,那出路是什么?我应该实现自己的节流中间件吗?再一次的问题是,通过Vapor部署的IP为空。
我将此问题发布在Github上,但已关闭,而我的进一步评论没有回复。