Rails 如何实现统计用户登陆错误超过 5 次显示验证码的需求

skhizein · 2014年10月24日 · 最后由 skhizein 回复于 2014年10月24日 · 2495 次阅读

大家好,现在有一个统计用户登陆错误超过 5 次显示验证码的需求,这个除了用 session 外还有没有其他更好的办法啊?本人小白一个,求各位大哥大姐教育啊。。。

#1 楼 @flowerwrong 嘿嘿,谢谢你,请问有没有不用 redis 的方法啊,现在没用 redis 是不是只能用 session 啊?

不是基于 session,用 redis记录ip和登陆失败次数.靠谱操作我觉得就两个,要么存到内存数据库 redis,要么持久化到数据库,效率低点。本质市一样的。

#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,十分感谢推荐!

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