新手问题 Rails 中如何实现登录次数尝试过多锁定十分钟

jasonpu · 2015年08月24日 · 最后由 rubyu2 回复于 2015年08月24日 · 3315 次阅读

最近在接受学校实验室的培训,要用 rails 框架实现个博客功能,涉及到登录有个要求,登录次数三次失败要锁定十分钟,然后才能尝试登录。我纯手写的登录功能,没有用到 devise 之类,这个该如何实现?有人可以给个思路吗?用到第三方东西越少越好,或者 memcached 能实现也可。

Rails 的精髓就是:能多用第三方组件的,绝对不要自己写。 回到主题。用 memcache 不是挺简单么,登录失败的时候检查 memcache 对应的值,如果没有就加上次数,如果有就更新次数。把键设置成 10 分钟过期就好了,10 分钟以后键自己消失了也就能再次登录了。

#1 楼 @msg7086

Rails 的精髓就是:能多用第三方组件的,绝对不要自己写。

不赞成,看情况。

用一堆第三方组件的时候,升级的时候真的很头疼,一个组件的兼容问题就能让前功尽弃

失败+1,成功置 0,过久置 0

#6 楼 @rei 这样写有点问题,默认的FileStore 的increment在 key 不存在的情况下是不会加 1 的。 文档:Increments an already existing integer value that is stored in the cache. If the key is not found nothing is done.

#7 楼 @nowherekai 用 memcached 或 redis。

#1 楼 @msg7086 好的谢谢我试试 memcached 还没太理解 cache 如何用

#2 楼 @luikore 这个方法好像更诱人..相对来说是锁定 id 不是锁定 ip 了?那恶意的人尝试一个又一个不同的账户不是无解了..

学习了!

#10 楼 @jasonpu 针对 ip 和 id 可以有不同策略,更高级点的做请求行为聚类...

#12 楼 @luikore 嗯我选择死亡...谢啦~不用太高级我用 memcache 试一下吧

@jasonpu 推荐你使用 redis 来实现限制用户登录频率 假设当前用户 id 为 2 如何记录用户登录的次数的方法可以看这篇文章来实现。这里就不过多介绍。 http://tise.c2qu.com/2015/07/26/rate-limiting-and-redis-realize

当用户登录的次数超过 10 次时,设置 user:2:sign key,且过期时间为 600 (10 分钟) 检查 user:2:sign 是否存在,如果存在则给予警告。

#6 楼 @rei 用这个方法除了 gemfile 方面配置,其他地方还需要配置什么吗

#6 楼 @rei 非常感谢,效果还可以的。

@rei 要不要加一个收藏回复的功能呢?

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