修改 Laravel 原生的 throttle ,使用 ip 进行限制登录

JellyBool

JellyBool

这里有一篇文章: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 !

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 1 条评论

0321liu
修改的评论也不能少于六个字哦!