zoukankan      html  css  js  c++  java
  • Django AUTHENTICATION_BACKENDS

    指定认证后端

    Django维护一个”authentication backends”的列表用来测试认证。当调用 django.contrib.auth.authenticate() — Django将尝试所有的认证后端。如果第一个认证方法失败了,Django将会继续尝试第二个,直到所有的都被尝试过。
    认证后端的列表在 AUTHENTICATION_BACKENDS 设置。内容应该是包含Python路径的元组。默认情况下, AUTHENTICATION_BACKENDS 设置为
    (‘django.contrib.auth.backends.ModelBackend’,),这是检测Django用户数据库的基本认证方案。
    按照 AUTHENTICATION_BACKENDS 的排列顺序,如果同样的用户名和密码在第一次就匹配了,那么Django将停止处理后面的东西。

    编写一个认证后端

    一个认证后端是一个类,实现了2个方法:get_user(id) 和 authenticate(**credentials) 。
    get_user 方法接受一个 id (可以是用户名,数据库ID或者其他的什么)并且返回一个 User 对象。
    authenticate 方法接受字典型认证信息的参数。大多情况下是如下样子的
    class MyBackend:
 def authenticate(username=None, password=None):
 # 检测用户名和密码,并返回一个User。

    他也可以处理一个代号(token),像这样
    class MyBackend:
 def authenticate(token=None):
 # 检测并返回User。
    当 authenticate 接受的参数被验证为有效的时候,应该返回一个 User 对象;如果无效的时候,应该返回 None 。

    Django的admin系统紧密地与 User 对象绑定在一起。目前,最好的处理方法就是为你每一个现存的后端(例如,你的LDAP目录或者你的外部SQL数据库等等。)数据创建一个Django的 User 对象。你可以预先写一个脚本来做这些事情,或者在用户第一次登录的时候在你的 authenticate 方法中做这些事情。

    下面是一个例子,使用在 settings.py 文件里定义的用户名和密码并且在用户第一次登录的时候创建一个Django的 User 对象。

    from django.conf import settings
    from django.contrib.auth.models import User, check_password
    
    class SettingsBackend:
        """
        Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD.
    
        Use the login name, and a hash of the password. For example:
    
        ADMIN_LOGIN = ‘admin’
        ADMIN_PASSWORD = ‘sha1$4e987$afbcf42e21bd417fb71db8c66b321e9fc33051de’
    
        """
        def authenticate(self, username=None, password=None):
            login_valid = (settings.ADMIN_LOGIN == username)
            pwd_valid = check_password(password, settings.ADMIN_PASSWORD)
            if login_valid and pwd_valid:
                try:
                    user = User.objects.get(username=username)
                except User.DoesNotExist:
                    # 创建新用户。
                    # 我们可以设置任何新的密码,因为它不会被检测。
                    # 在这里我们使用”get from settings.py”。
                    user = User(username=username, password=’get from settings.py’)
                    user.is_staff = True
                    user.is_superuser = True
                    user.save()
                    return user
            return None
    
        def get_user(self, user_id):
            try:
                return User.objects.get(pk=user_id)
            except User.DoesNotExist:
                return None
  • 相关阅读:
    Mysql中varchar类型的猫腻!
    震惊!java中日期格式化的大坑!
    mysql数据库限制多次登录失败,限定用户重试时间
    2021年回顾与展望
    多线程循环打印abc
    2020年总结-用学习过的技术搭建一个简单的微服务框架 + 源码
    回溯算法
    PyTorch 中 weight decay 的设置
    数据结构与算法——计数排序
    数据结构与算法——堆排序
  • 原文地址:https://www.cnblogs.com/robinunix/p/7988259.html
Copyright © 2011-2022 走看看