首页 > 解决方案 > Laravel 的 Throttling 是如何在不同的路由上工作的?

问题描述

我正在尝试对不同的路线设置不同的速率限制,

起初我以为我可以->middleware('throttle:x,y')在更改 x,y 时简单地为每条路线添加一个不同的,它只会将其应用于该路线

例如

Route::get('/sample1', ['controller@method1'])->middleware('throttle:5,1');
Route::get('/sample2', ['controller@method2'])->middleware('throttle:10,2');

所以这里/sample1每分钟有5个限制,/sample2每2分钟自动有10个限制,不会影响彼此的限制。

但是后来我在源代码上阅读了>这个文件<。

显然关键是'key' => $prefix . $this->resolveRequestSignature($request) 而且$this->resolveRequestSignature($request)很简单:

if ($user = $request->user()) {
    return sha1($user->getAuthIdentifier());
} elseif ($route = $request->route()) {
    return sha1($route->getDomain().'|'.$request->ip());
}

与那里的路线无关,所以我假设油门是全局的,除非我们指定$prefix第三个参数链接这个->middleware('throttle:x,y,PREFIX')

但我不明白的是,它目前像我期望的那样工作!这意味着当我在一条路线上受到限制时,我不会在另一条路线上受到限制。

我的问题是:

  1. 如果我们想要一个不同的,我们是否应该总是提供第三个参数x,y,或者它会被自动应用?

  2. 如果两条不带前缀的路由具有不同的油门限制,将应用哪一个?

  3. 非常感谢任何额外的细节

标签: phplaravel

解决方案


推荐阅读