Laravel 5.5 ThrottleRequest中间件

use*_*289 6 php laravel laravel-5.5

有没有人知道如何ThrottleRequest在Laravel 5.5中实现中间件?

我不清楚decayMinutes参数的含义,特别是:https://laravel.com/api/5.5/Illuminate/Routing/Middleware/ThrottleRequests.html

我理解如何将它应用到路线,我只是不确定什么是可重复的参数.

Sam*_*mes 6

我理解decayMinutes为保留时间.对于intance,如果你想尝试使用错误的密码登录,但是如果他尝试11次,则用户会被阻止指定的分钟数decayMinutes.如果您指定10分钟decayMinutes,则用户将被阻止10分钟

  • 这是错误的答案.`decayMinutes`(在Laravel 5.5中)不是块时间. (2认同)
  • @BasheerAhmedKharoti如果我检查ThrottleRequest类(我们正在谈论限制请求而不是登录),我看到亚历山大是对的. (2认同)

Ale*_*ruk 4

decayMinutes- 在您的限制内的时间将被计算在内。$decayMinutes * 60从技术上讲,限制是缓存中TTL(生存时间)秒的值,每次命中都会增加。当 TTL 超过值时,将自动销毁缓存中的内容并开始新的命中计数。

查看RateLimit::hit()代码。这很清楚:

/**
 * Increment the counter for a given key for a given decay time.
 *
 * @param  string  $key
 * @param  float|int  $decayMinutes
 * @return int
 */
public function hit($key, $decayMinutes = 1)
{
    $this->cache->add(
        $key.':timer', $this->availableAt($decayMinutes * 60), $decayMinutes
    );
    $added = $this->cache->add($key, 0, $decayMinutes);
    $hits = (int) $this->cache->increment($key);
    if (! $added && $hits == 1) {
        $this->cache->put($key, 1, $decayMinutes);
    }
    return $hits;
}
Run Code Online (Sandbox Code Playgroud)

如果您想将某些活动限制为每 5 分钟 10 次点击,则decayMinutes必须为 5。