大家好,现在有一个统计用户登陆错误超过 5 次显示验证码的需求,这个除了用 session 外还有没有其他更好的办法啊?本人小白一个,求各位大哥大姐教育啊。。。
redis 不错
#1 楼 @flowerwrong 嘿嘿,谢谢你,请问有没有不用 redis 的方法啊,现在没用 redis 是不是只能用 session 啊?
不是基于 session,用 redis记录ip和登陆失败次数.靠谱操作我觉得就两个,要么存到内存数据库 redis,要么持久化到数据库,效率低点。本质市一样的。
记录ip和登陆失败次数
#3 楼 @flowerwrong 哦哦,了解了,thank u~
#4 楼 @skhizein 「IP + 用户」的粒度去限制用户的错误登陆次数
private def inc_ip_count Rails.cache.write "login/#{request.remote_ip}", ip_count + 1, :expires_in => 60.seconds end def ip_count Rails.cache.read("login/#{request.remote_ip}").to_i end def require_recaptcha? ip_count >= 3 end
https://github.com/chloerei/writings/blob/master/app/controllers/user_sessions_controller.rb
#5 楼 @hz_qiuyuanxin thank u, 粒度。好专业,哈哈
#6 楼 @cgg5207 哇,十分感谢,已然完备解决方案一个啊,,同样感谢 rei 大哥
推荐一个 gem https://github.com/kickstarter/rack-attack
奥,这个是拿来 block 的,显示验证码不知道能不能实现。
#9 楼 @Rei thank u Rei 大哥,我先用 session 做一个简单实现,然后在研究研究 redis 用一下,然后在研究这个 gem,十分感谢推荐!