我很难理解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
感谢。
答案 0 :(得分:0)
authenticate()函数返回使用login()
附加会话的用户使用authenticate()验证一组凭据。它需要 凭证作为关键字参数,用户名和密码 默认情况下,针对每个身份验证后端检查它们,以及 如果凭据对后端有效,则返回User对象。如果 凭证对任何后端无效或后端提升 PermissionDenied,它返回None。:
如果出现以下身份验证,则会向后端传递用户名和密码。
即使从安全方面来看,这个后端仍然有效,但不是最好的一个:)