扫码关注官方订阅号
基于Django框架下的用户登录页面,如果想实现非法登录次数限制的功能(比如说,用户在5分钟内连续输错10次密码,则该用户在24小时内无法登录),有哪些思路?
认证0级讲师
提供一些思路供参考:
用户登录失败,将登录失败次数记录到cache中:比如redis
在5分钟内连续登录失败3次,为了防止暴力破解用户密码行为,此时可在登录页面提供验证码输入框
验证码输入失败,不需要验证账号密码是否正确
如果验证码正确,但是5分钟内已经输错了10此账号密码,则可以冻结该用户,设置该用户的is_active属性为False;冻结24小时,可在cache中写一个TTL为24小时的Flag,比如以username为key
用户登录时,首先检查是否存在key未username的Flag,如果有表明该用户在冻结状态中,因为设置了is_active为False,登录自然会失败
如果flag不存在于cache中,在检查该密码是否正确,如果正确可设置is_active为True,以恢复期冻结状态
有个django-ratelimit的库,可以部分满足你的需要,限制接口调用的次数,可以根据ip限制,根据时间限制等等,用起来也非常灵活。
django-ratelimit
项目地址:https://github.com/jsocol/dja...文档地址:http://django-ratelimit.readt...
示例:
from ratelimit.decorators import ratelimit @ratelimit(key='ip') def myview(request): # ... @ratelimit(key='ip', rate='100/h') def secondview(request): # ...
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
提供一些思路供参考:
用户登录失败,将登录失败次数记录到cache中:比如redis
在5分钟内连续登录失败3次,为了防止暴力破解用户密码行为,此时可在登录页面提供验证码输入框
验证码输入失败,不需要验证账号密码是否正确
如果验证码正确,但是5分钟内已经输错了10此账号密码,则可以冻结该用户,设置该用户的is_active属性为False;冻结24小时,可在cache中写一个TTL为24小时的Flag,比如以username为key
用户登录时,首先检查是否存在key未username的Flag,如果有表明该用户在冻结状态中,因为设置了is_active为False,登录自然会失败
如果flag不存在于cache中,在检查该密码是否正确,如果正确可设置is_active为True,以恢复期冻结状态
有个
django-ratelimit的库,可以部分满足你的需要,限制接口调用的次数,可以根据ip限制,根据时间限制等等,用起来也非常灵活。项目地址:https://github.com/jsocol/dja...
文档地址:http://django-ratelimit.readt...
示例: