zoukankan      html  css  js  c++  java
  • django 自定义身份认证

    自定义身份认证:

    Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成的认证系统。定制自己的项目的权限系统需要了解哪些一些关键点,即Django中哪些部分是能够扩展或替换的。这个文档提供了如何定制权限系统的细节。
    “认证”后端 在以下情形时可被扩展:当一个 User 模型对象带有用户名和密码时,且需要有别于 Django 默认的认证功能。
    你可为你的模型提供可通过 Django 权限系统检查的 定制的权限。
    你能够扩展 默认的 User 模型,或实现 一个完全定制的模型。

    指定认证后端:

    在底层,Django 维护一个“认证后台”的列表。当调用django.contrib.auth.authenticate() 时 —— 如何登入一个用户 中所描述的 —— Django 会尝试所有的认证后台进行认证。如果第一个认证方法失败,Django 将尝试第二个,以此类推,直至试完所有的认证后台。
    使用的认证后台通过AUTHENTICATION_BACKENDS 设置指定。它应该是一个包含Python 路径名称的元组,它们指向的Python 类知道如何进行验证。这些类可以位于Python 路径上任何地方。
    默认情况下,AUTHENTICATION_BACKENDS 设置为:

    ('django.contrib.auth.backends.ModelBackend',)
    

    这个基本的认证后台会检查Django 的用户数据库并查询内建的权限。它不会通过任何的速率限制机制防护暴力破解。你可以在自定义的认证后端中实现自己的速率控制机制,或者使用大部分Web 服务器提供的机制。
    AUTHENTICATION_BACKENDS 的顺序很重要,所以如果用户名和密码在多个后台中都是合法的,Django 将在第一个匹配成功后停止处理。
    如果后台引发PermissionDenied 异常,认证将立即失败。Django 不会检查后面的认证后台。

    编写认证后端:

    继承django.contrib.auth.backends.ModelBackend后实现authenticate方法即可。

    实例:

    class CustomBackend(ModelBackend):
        """
        自定义用户验证
        """
        def authenticate(self, username=None, password=None, **kwargs):
            try:
                user = User.objects.get(Q(username=username)|Q(mobile=username))
                if user.check_password(password):
                    return user
            except Exception as e:
                return None

    settings.py

    AUTHENTICATION_BACKENDS = (
        'users.views.CustomBackend',
    )
    

      

  • 相关阅读:
    算法实践--最长公共子序列(Longest Common Subsquence)
    算法实践--最长递增子序列(Longest Increasing Subsquence)
    googletest--Death Test和Exception Test
    googletest--测试控制
    googletest--Test Fixture
    googletest基本测试宏
    使用googletest进行C++单元测试(Netbeans为例)
    Boost--optional
    Boost--any
    Boost--variant (C++中的union)
  • 原文地址:https://www.cnblogs.com/zenan/p/9111123.html
Copyright © 2011-2022 走看看