如何修复表单密码验证,密码不匹配



当我完成我的用户名和密码后,此错误爆炸了,他写道用户名和密码不匹配,但是所有数据都是valide and True!如何修复它?如何检查密码,如果数据库中的密码以加密形式存储,以及以字符串形式提供的密码!

谢谢大家的帮助,我将期待您的建议!

forms.py

class UserLogInForm(forms.Form):
    username = forms.RegexField(regex=r'^w+$', widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Username"), error_messages={ 'invalid': _("This value must contain only letters, numbers and underscores.") })
    password = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password"))
def clean_username(self):
    user = User.objects.get(username__iexact=self.cleaned_data['username'])
    if user: 
        return self.cleaned_data['username']
    else:
        raise forms.ValidationError('This user does not exist!')
def clean(self):
    username = self.cleaned_data['username']
    password = self.cleaned_data['password']
    user = User.objects.filter(username=username)
    if user.count() == 1:
        user = user.first()
        if user.check_password(password):
            raise forms.ValidationError("Incorrect password!")
        return self.cleaned_data
    else:
        raise forms.ValidationError('This user does not exist!')

views.py

def login_view(request):
    form = UserLogInForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data['username'],
        password = form.cleaned_data['password'],
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('/')
        else:
           return redirect('accounts/login')
    context = {'form':form}
    return render(request, 'accounts/registration/login.html', context)

check_password()返回true时,您正在提高错误。

我建议您可以重写这样的方法,

def clean(self, *args, **kwargs):
    username = self.cleaned_data.get("username")
    password = self.cleaned_data.get("password")
    try:            
        user = User.objects.get(username=username)
    except User.DoesNotExist:
        raise forms.ValidationError("This user does not exist!")  
    if user and not user.check_password(password):
        raise forms.ValidationError("Incorrect password!"):
    if user and not user.is_active:
        raise forms.ValidationError("This user is no longer active.")
    return super(UserLogInForm, self).clean(*args, **kwargs)

另外,在您视图中从这些线中删除尾随逗号,

username = form.cleaned_data['username']
password = form.cleaned_data['password']

由于落后逗号,python返回元组而不是弦。

最新更新