2014-01-17 4 views
2

Когда пользователь успешно зарегистрировался и попал на главную страницу, есть ссылка «сменить пароль» для смены пароля. Он отображает форму для изменения пароля с тремя полями ввода для старого пароля, новый пароль подтверждает новый парольФорма Django для смены пароля

Вот мой код.

forms.py

class reset_form(forms.Form): 


    oldpassword = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'type':'password', 'placeholder':'your old Password', 'class' : 'span'})) 
    newpassword1 = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'type':'password', 'placeholder':'New Password', 'class' : 'span'})) 
    newpassword2 = forms.CharField(max_length = 20, widget=forms.TextInput(attrs={'type':'password', 'placeholder':'Confirm New Password', 'class' : 'span'})) 


    def clean(self): 
     if 'newpassword1' in self.cleaned_data and 'newpassword2' in self.cleaned_data: 
      if self.cleaned_data['newpassword1'] != self.cleaned_data['newpassword2']: 
       raise forms.ValidationError(_("The two password fields did not match.")) 
     return self.cleaned_data 

views.py


def change_password(request): 

    if request.method == 'POST': 
     form = reset_form(request.POST) 
     if form.is_valid(): 
      newpassword=form.cleaned_data['newpassword1'], 
      username=request.user.username 
      password=request.user.password 

      user = authenticate(username=username, password=password) 
      if user is not None: 
       user.set_password(newpassword) 
       user.save() 
       return HttpResponseRedirect('/reset/success/') 

      else: 
       return render(request, 'reset_password.html',{'error':'You have entered wrong old password','form': form}) 

     else: 
      return render(request, 'reset_password.html',{'error':'You have entered old password','form': form}) 
    else: 
     form = reset_form() 
    content = RequestContext(request, {'form': form}) 
    return render(request, 'reset_password.html', content,) 

После отправки формы с правильным старый пароль, я получаю это сообщение Вы ввели неправильный старый password Я не знаю, почему я собираю эту ошибку messag e помогите с этим кодом

ответ

5

По какой-то причине вы используете поле пароля, хранящееся в базе данных, через request.user, а не тот, который они действительно ввели в форму. Версия базы данных хеширована, и когда вы вызываете authenticate, она снова хеширует ее, поэтому не удается совместить.

Вы должны использовать значение, которое пользователь вводит в форме:

username = request.user.username 
password = form.cleaned_data['oldpassword'] 

user = authenticate(username=username, password=password) 
+0

Спасибо Daniel для ответа это действительно помогло мне. Но теперь я получаю еще одну проблему, и мой пароль изменен, но какой-то другой текст. Теперь мой пароль не старый, а новый пароль, который я поставил. Что я должен делать ? –

+1

Как вы это определяете? Не забывайте, как я упоминал в ответе, пароль сохраняется в базе данных. –

Смежные вопросы