新手问题 如何设计登录错三次之后才输入验证码?

jasonliu · 2015年11月16日 · 最后由 whatareyou 回复于 2016年07月21日 · 2909 次阅读

目前在做一个登录验证码的功能,ruby-china 是登录的时候就显示验证码,但是我要做的是登录错三次才显示验证码,我的设计思路是在登录的时候,如果密码验证错误,session["login_filed"] += 1, 如果超过三次就让客户端拉验证码,用户成功登录之后就把 session 清除掉,大家觉得这样的设计有没有什么问题?有没有更好一些的方案?

共收到 14 条回复

用 redis 存储,再利用 ttl 控制多长时间内重试次数进行限制

@sandy_xu 把验证码的文本存储在 session 里面会有问题么?

#2 楼 @jasonliu 我觉得不能跨浏览器是最大问题,还有用户清理 cookies,但可能性会很小。

大爱 redis ttl

@jasonliu 可以实现功能就好,不要追求所谓优雅,最好的解决方法。。。 我以前也经常患得患失,就怕自己实现的方法不是通用的,不是优雅的,浪费了不少时间。 现在觉得实现了就好,等水平提高了,后面自然就会知道怎么解决更好,到时在重构。

@sandy_xu 如果用 redis 存储的话,那 redis 的 key 用什么表示好呢?

如果是 client session 的话,把验证码放在 session 里面应该不安全吧

#6 楼 @jasonliu 这个问题是你要对什么进行三次错误就限制的问题。我是对账户(这里用户输入什么就是什么),也就是用户输入的登录账号名 login。

#7 楼 @jasonliu 你查一下 cookies.signed[:key] = value

如果把登错次数存在 session 里面,用户可能会清除 cookie,相当于可以绕过限制不用输入验证码,所以目前我尝试使用 IP 来记录玩家登错次数,但是也会造成同一出口的 IP 受影响

如果是 devise 的话有登陆失败的次数 (可以自己写个), 如果超过 3 次, 就使用验证码.

#5 楼 @roclv 听君一席话,胜读十年书。为此我专门浪费时间申请了这个什么网站的账号,来回复给你,就是想说,你说的太好了,谢谢你!!!!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册