Django框架下如何实现非法登录次数限制的功能?

基于Django框架下的用户登录页面,如果想实现非法登录次数限制的功能(比如说,用户在5分钟内连续输错10次密码,则该用户在24小时内无法登录),有哪些思路?

 

思路一:

  1. 用户登录失败,将登录失败次数记录到cache中:比如redis

  2. 在5分钟内连续登录失败3次,为了防止暴力破解用户密码行为,此时可在登录页面提供验证码输入框

  3. 验证码输入失败,不需要验证账号密码是否正确

  4. 如果验证码正确,但是5分钟内已经输错了10此账号密码,则可以冻结该用户,设置该用户的is_active属性为False;冻结24小时,可在cache中写一个TTL为24小时的Flag,比如以username为key

  5. 用户登录时,首先检查是否存在key未username的Flag,如果有表明该用户在冻结状态中,因为设置了is_active为False,登录自然会失败

  6. 如果flag不存在于cache中,在检查该密码是否正确,如果正确可设置is_active为True,以恢复期冻结状态

思路二:

有个django-ratelimit的库,可以部分满足你的需要,限制接口调用的次数,可以根据ip限制,根据时间限制等等,用起来也非常灵活。

from ratelimit import limits

@limits(calls=15, period=FIFTEEN_MINUTES)
def myview(request):
    # ...

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值