如何在运行set_unusable_password后对用户进行身份验证?

时间:2015-05-04 06:41:06

标签: python django

我用

创建了一个用户
 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'"

我应该如何验证这些用户?

2 个答案:

答案 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')