从有关django.contrib.auth.authenticate
函数的文档中,我们发现-
使用 authenticate(( 验证一组凭据。它将凭据作为默认情况下的关键字参数、用户名和密码,针对每个身份验证后端检查它们,如果凭据对后端有效,则返回 User 对象。
现在,我的问题是用户名是什么意思?
- 是模型列的名称吗?
- 还是模型的主键?
实际上,我一直在以用户名发送电子邮件,因为我想根据电子邮件(主键(而不是用户名(无论这意味着什么(检查凭据,但它不起作用......但是我将模型的一列命名为用户名,但它仍然不起作用......所以,我想知道他们所说的用户名到底是什么意思。
我的代码不起作用 -
email = request.POST['email']
#email = request.POST['username'] Changed email column-name to username but didn't work!
password = request.POST['password']
user = authenticate(request, username=email, password=password)
print (user) ## None
默认 UserModel 包含username
属性(模型的列(,用于标识身份验证后端中的用户。您有两种可能性:
-
创建一个没有用户名属性的新用户模型以使用电子邮件进行身份验证(您必须创建新的身份验证后端(
-
只需更改身份验证后端以使用电子邮件或两者进行身份验证,并保留用户名属性
要将用户名替换为电子邮件:
https://medium.com/@ramykhuffash/django-authentication-with-just-an-email-and-password-no-username-required-33e47976b517
Django - 使用电子邮件登录
如果您只想更改身份验证后端,请使用电子邮件进行身份验证:
Django - 使用电子邮件登录
附言不应重命名authenticate
函数的username
参数,即使您改用email
也是如此。