Django自定义后端文档差异

时间:2017-03-01 16:21:06

标签: python django

我很难理解Django的文档如何概述了contrib.auth.models.Users中的authenticate方法的覆盖。根据以下here中的代码,如果方法传递了有效的用户名和数据库中任何位置存在的有效哈希,无论它是否与提供的主键字段的密码匹配,那么authenticate方法都不会成功(用户名) ,电子邮件等...)或不。 check_password正在做什么,我没有看到确保在幕后检查密码传递的字段?因为这个提供的例子似乎有缺陷。

# From Django 1.10 Documentation
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:
            # Create a new user. There's no need to set a password
            # because only the password from settings.py is checked.
            user = User(username=username)
            user.is_staff = True
            user.is_superuser = True
            user.save()
        return user
    return None

感谢。

1 个答案:

答案 0 :(得分:0)

authenticate()函数返回使用login()

附加会话的用户
  

使用authenticate()验证一组凭据。它需要   凭证作为关键字参数,用户名和密码   默认情况下,针对每个身份验证后端检查它们,以及   如果凭据对后端有效,则返回User对象。如果   凭证对任何后端无效或后端提升   PermissionDenied,它返回None。:

如果出现以下身份验证,则会向后端传递用户名和密码。

  • 将密码与Django设置和用户对象中的一组进行比较 从数据库中查询。
  • 如果用户名不存在,则后端会创建新用户。

即使从安全方面来看,这个后端仍然有效,但不是最好的一个:)