基于缓存的django应用程序,在多次登录失败后锁定用户。

django-lockout的Python项目详细描述


django-lockout是一个基于缓存的django应用程序,在 许多登录尝试失败。因为django-lockout跟踪登录尝试 在你的网站缓存中,它是快速和轻量级的。是为Django准备的 在没有暴力攻击的情况下 额外的数据库开销。

django-lockout包装django.contrib.auth.authenticate并引发 lockout.LockedOut出现过多登录尝试。你的观点是 负责捕获和处理LockedOut,不管您认为是什么 适当的。django-lockout的中间件类存储请求对象 在线程本地名称空间中提供包装的auth.authenticate 函数访问它。

登录尝试可由IP Only或IP Plus用户代理跟踪。

要求

django-lockout是为django 1.3设计的。它也适用于django 1.0, 1.1和1.2,除了测试套件(它依赖于 django.test.client.RequestFactory)。如果将django-lockout与 早于1.3的django版本,不应将'lockout'添加到 INSTALLED_APPS

django-lockout要求您为站点启用了缓存。

安装

您可以使用以下命令安装django-lockout

pip install django-lockout

或:

easy_install django-lockout

'lockout.middleware.LockoutMiddleware'添加到MIDDLEWARE_CLASSES中。 它应该出现在django的AuthenticationMiddleware

MIDDLEWARE_CLASSES = [
    'lockout.middleware.LockoutMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    ...
    ]

仅当您希望将'lockout'添加到INSTALLED_APPS时才需要 运行django-lockout的测试套件。

用法

下面是一个如何使用django-lockout

try:
    user = auth.authenticate(username=username, password=password)
except LockedOut:
    messages.warning(request, 'Your account has been locked out because of too many failed login attempts.')

如果需要清除IP或IP Plus的失败尝试记录 用户代理,调用lockout.reset_attempts,为此传递request。 IP或IP Plus用户代理:

reset_attempts(request)

设置

锁定最大尝试次数
在IP或IP加上用户代理之前的最大登录尝试次数 被锁在外面。默认值:5.
锁定时间
应锁定IP或IP Plus用户代理的秒数。 默认值:600(10分钟)。
锁定执行窗口

重置失败登录尝试之前的秒数,以及 IP或IP Plus用户代理有了新的开始。默认值:300(5分钟)。

LOCKOUT_ENFORCEMENT_WINDOW最多影响失败的登录尝试 允许,而LOCKOUT_TIME在最大尝试次数为 达到。例如,如果LOCKOUT_ENFORCEMENT_WINDOW为5分钟, 假设用户的登录尝试失败,然后是另一个失败 3分钟后尝试登录。两次尝试都将计入 最大值。但是,如果5分钟标记(从第一次失败的尝试开始)是 如果尝试次数少于允许的最大次数,则失败将过期 并且用户将再次允许最大尝试。如果用户 超过LOCKOUT_ENFORCEMENT_WINDOW内的最大值,用户将 锁定LOCKOUT_TIME秒。

锁定用户代理
是否跟踪IP Plus用户代理的失败登录尝试,而不是 仅限IP。默认值:False.
锁定缓存前缀
django-lockout生成的缓存键的前缀。默认值:'lockout'.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:不解析XML的简单XML。例外   KIE Workbench的java自定义UI   java将元素从bucket移动到LinkedList,但有一个元素被完全删除   如何将java stream collect转换为scala   java运行AsynkTask多次不工作   java组织。xml。萨克斯。SAXParseException:cvccomplextype。2.4.c:匹配的通配符是严格的   java是一种计算排序算法所需时间的合适方法   java在O(logn)时间内对排序整数数组中具有相同数字的数字进行计数   xpages从当前数据库javaAgent调用另一个数据库的javaAgent   java如何在instagram中上传特定位置的所有照片   JavaApachePOI可以有效地删除多个列   java创建的对象数   java我可以在关闭连接时关闭Oracle JDBC自动提交吗?