Laravel如何设置登录失败后自动锁定账户,防止多次输错密码?
- 内容介绍
- 文章标签
- 相关推荐
本文共计758个文字,预计阅读时间需要4分钟。
默认不锁定,必须手动添加逻辑——Laravel 自带的 Auth 机制完全处理登录失败次数和账户锁定。
为什么 AttemptLogin 不会自动锁账号
Laravel 的 attempt 方法只校验凭证,成功就发 token 或写 session,失败就返回 false,连日志都不记。它不知道“这是第几次错”,更不会查数据库里有没有超限。
- 所有失败计数、时间窗口、锁定状态都得自己存(推荐用缓存 + 用户字段组合)
-
throttle中间件只限制请求频率(IP 或用户),不是按账号维度做“输错 5 次就锁 15 分钟” - 如果你只靠
RateLimiter::attempt,那锁的是 IP,不是用户,换网络就能绕过
怎么实现“输错 N 次锁 M 分钟”
核心是三件事:记录失败、判断是否超限、拦截后续登录。别碰数据库主表字段(比如加个 locked_at),用缓存更轻量也更准。
本文共计758个文字,预计阅读时间需要4分钟。
默认不锁定,必须手动添加逻辑——Laravel 自带的 Auth 机制完全处理登录失败次数和账户锁定。
为什么 AttemptLogin 不会自动锁账号
Laravel 的 attempt 方法只校验凭证,成功就发 token 或写 session,失败就返回 false,连日志都不记。它不知道“这是第几次错”,更不会查数据库里有没有超限。
- 所有失败计数、时间窗口、锁定状态都得自己存(推荐用缓存 + 用户字段组合)
-
throttle中间件只限制请求频率(IP 或用户),不是按账号维度做“输错 5 次就锁 15 分钟” - 如果你只靠
RateLimiter::attempt,那锁的是 IP,不是用户,换网络就能绕过
怎么实现“输错 N 次锁 M 分钟”
核心是三件事:记录失败、判断是否超限、拦截后续登录。别碰数据库主表字段(比如加个 locked_at),用缓存更轻量也更准。

