我用
创建了一个用户 new_user = create_user(
username=username, email=email, first_name=first_name,
last_name=last_name)
new_user.set_unusable_password()
但authenticate()
会为该用户返回None
auth_user = authenticate(
username=new_user.username, password=new_user.password)
该用户的登录失败
AttributeError: "'AnonymousUser' object has no attribute 'backend'"
我应该如何验证这些用户?
答案 0 :(得分:1)
尝试编写不需要密码的自定义身份验证后端。
尝试this:
然后,您只需使用自定义身份验证功能:
auth_user = authenticate(username=new_user.username)
答案 1 :(得分:1)
当用户没有密码时,您需要authenticate(**credential)
用户。
django.contrib.auth.authenticate()
用于验证指定的用户名和密码。
因此,您应该仅使用用户名创建your own authentication backend。基本上,您需要做的唯一身份验证是检查用户是否在数据库中。但很明显,用户在数据库中。因此,您可以直接设置user.backend = 'django.contrib.auth.backends.ModelBackend'
来伪造身份验证过程。
随后login()
登录指定用户。
当您手动记录用户时,您必须在致电
authenticate()
之前使用login()
成功对用户进行身份验证。authenticate()
在用户上设置一个属性,指出哪个身份验证后端成功验证了该用户(有关详细信息,请参阅后端文档),稍后在登录过程中需要此信息。
def autologin(request):
# ...
# ...
# ...
new_user = create_user(
username=username,
email=email,
first_name=first_name,
last_name=last_name)
user = authenticate(new_user)
if user.is_authenticated():
login(request, user)
return render(request, 'template.html')