这里有一篇文章:Laravel 项目使用 throttle 实现重置密码限制提交次数 介绍了在 重置密码
的时候使用 throttle,但是在默认的情况下,throttle 的限制是根据用户名和 ip 地址来
确定的,源代码位于 Illuminate\Foundation\Auth\ThrottlesLogins
:
protected function throttleKey(Request $request)
{
return Str::lower($request->input($this->username())).'|'.$request->ip();
}
应用场景
在这里,我希望实现的是只根据 ip 和进行限制,这样做的好处是什么呢?其实我们可以想象这样的一个应用场景: 如果一个
想搞破坏的人,他使用一堆的用户名和密码进行一次一次的暴力破解,那么他只要保证每次的用户不一样就可以避开 laravel
原来的 throttle 限制了,所以在这里我个人是直接把 throttle 做成了只根据 ip 来进行限制。
实现
实现方法就是重写 throttleKey
方法,在 app/Http/Controllers/Auth/AuthController.php
添加:
protected function throttleKey(Request $request)
{
if (config('auth.throttle_key') == 'ip') {
return $request->ip();
} else {
return Str::lower($request->input($this->username())).'|'.$request->ip();
}
}
然后在 config/auth.php
中添加自定义的配置:
'throttle_key' => 'ip' // 这里可以配置为 username 或 ip
这样既可以切换回到原来的限制机制,也可以解决上面面临的问题。 Nice !