Laravel - 限制特定API路由的访问频率

6

我目前正在开发一个由Laravel驱动的网站,其中包括两个独立的服务器,一个API服务器和一个公共Web服务器(两者都运行着Laravel)。

API服务器有许多路由,用于验证特定关键术语的可用性,例如电子邮件地址和URL slug。这些路由通过AJAX调用来检查数据库,并在按键时触发。

由于AJAX请求被触发多次甚至每分钟,API会抛出“Too many requests”错误。我知道可以通过增加请求限制来解决这个问题,但我只想对其中两个路由进行设置,而不是所有路由。

我该如何禁用单个API路由上的速率限制呢?

这里是其中一个标准路由:

Route::post('/email/is-available', function(Request $request) {

    ...

})->middleware('my_own_api_key_checking_middleware');

非常感谢您提前的帮助!

我会使用 https://github.com/GrahamCampbell/Laravel-Throttle,它附带了一个路由中间件。 - namelivia
太好了,谢谢@namelivia。您有什么想法可以禁用速率限制而不是增加它吗? - Ryan
是的,在app/Http/Kernel.php中将throttle行注释掉。顺便说一下,该包已默认集成在最新版本的laravel框架中。让我详细说明一下答案。 - namelivia
1个回答

12

由于Laravel默认对所有API路由应用节流中间件,因此您会收到“请求过多”的消息。要禁用它,请转到app/Http/Kernel.php并从属性$middlewareGroups中删除或注释throttle数组条目,这将禁用组中每个路由的节流。

现在,在您的路由文件中,将其添加到您想要的路由中:

->middleware('throttle:240,1');

第一个数字是请求数量的限制,第二个数字是时间。


太好了,感谢您的回答!如果要禁用单个路由的限流,我是否需要禁用所有路由并重新应用限制到我想要启用限流的所有路由? - Ryan
哦,这是使用 https://github.com/GrahamCampbell/Laravel-Throttle 吗?如果是的话,请不要忘记在您的回答中包含它 :) - Ryan
1
你可以创建一个中间件组,并将所有路由放入其中,但是你不想限制的那个路由除外。 - namelivia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接