"User already exist" 自定义 Django 身份验证后端

"User already exist" Custom Django Authentication Backend

我正在编写一个自定义的 Django 身份验证,该代码可以很好地创建用户,但是当我尝试登录时,就像我再次注册一样,所以无法访问我的用户帐户,因为每个尝试登录时出现错误,因为具有该凭据的用户已经存在(我就是那个用户)。

输出为:<ul class="errorlist"><li>address<ul class="errorlist"><li>User with this Address already exists.</li></ul></li></ul>

Models.py:

class AppUser(AbstractUser):
    username = models.TextField(unique=True)
    address = models.CharField(max_length=34, unique=True)
    key = models.CharField(max_length=34)
    
    def __str__(self):
        return self.username

Forms.py:

class NewUserForm(forms.ModelForm): 
    class Meta:
        model = AppUser
        fields = ("username", "address", "key")

    def save(self, commit=True):
        user = super(NewUserForm, self).save(commit=False)
        user.address = self.cleaned_data["address"]
        user.key = self.cleaned_data['key']
        if commit:
            user.save()
        return user

class LoginUserForm(forms.ModelForm): 
    class Meta:
        model = AppUser
        fields = ("address", "key")

    def __init__(self, request=None, *args, **kwargs):
        self.request = request
        super().__init__(*args, **kwargs)

Backends.py:

class AppUserBackend(ModelBackend):

    def authenticate(self, request, **kwargs):
        address = kwargs['address']
        key = kwargs['key']
        try:
            customer = AppUser.objects.get(address=address)
            
            if customer.key == key:
                return customer.user
            else:
                print("Error")
        except AppUser.DoesNotExist:
            pass

Views.py:

def login_request(request):
    if request.method == 'POST':
        form = LoginUserForm(request=request, data=request.POST) 
        if form.is_valid():
            address = form.cleaned_data.get('address')
            key = form.cleaned_data.get('key')
            user = authenticate(request=request, address=address, key=key)
            if user is not None:
                login(request, user, backend='main.backends.AppUserBackend')
                return redirect("main:home")
            else:
                print("User is none")
        else:
            print("Not valid")

    form = LoginUserForm()
    return render(request = request,
                    template_name = "main/login.html",
                    context={"form":form}
                    )

def register(request):
    if request.method == "POST":
        form = NewUserForm(request.POST)
        if form.is_valid():
            user = form.save()

            login(request, user, backend='main.backends.AppUserBackend')
            return redirect("main:index")

            return render(request = request,
                        template_name = "main/register.html",
                        context={"form":form})
            
    form = NewUserForm
    return render(request = request,
                  template_name = "main/register.html",
                  context={"form":form}
                  )

当我 运行 代码时,我可以毫无问题地创建用户,并且该用户存储在数据库中,但是当我尝试登录时,就像我再次创建用户一样。我知道我失踪了,但不知道是什么。

我通过更改 forms.py 解决了问题:

class LoginUserForm(forms.ModelForm): 
    class Meta:
        model = AppUser
        fields = ("address", "key")

    def __init__(self, request=None, *args, **kwargs):
        self.request = request
        super().__init__(*args, **kwargs)

至:

class LoginUserForm(forms.Form): 
    address = forms.CharField(label='address', max_length=100)
    private_key = forms.CharField(label='private_key', max_length=100)

    def __init__(self, request=None, *args, **kwargs):
        self.request = request
        super().__init__(*args, **kwargs)

所以主要问题是我正在调用继承自 forms.ModelFormLoginUserForm,一个具有 save() 方法的 class,所以我是 saving/creating 用户再次而不是验证。