2017-06-02 14 views
0

私はパスワード変更フォームに問題があります。 私はDjangoのパスワードリセット機能を使いたくありません。Django 1.11 - パスワードリセット

def view_password(request): 
    if request.user.is_authenticated(): 
     if request.method == 'POST': 
      form = ChangePasswordForm(request.POST) 
      if form.is_valid(): 
       new_password = form.cleaned_data['new_password'] 
       confirm_password = form.cleaned_data['confirm_password'] 
       if new_password == confirm_password: 
        strengh = new_password[0].isalpha() 
        if all(c.isalpha() == strengh for c in new_password): 
         messages.add_message(request, messages.INFO, 'Le mot de passe doit contenir au moins 8 charactères lettres et chiffres.') 
        else: 
         update = User.objects.get(id=request.user.id) 
         update.set_password('new_password') 
         update.save() 
         messages.add_message(request, messages.INFO, 'Votre mot de passe a bien été changé.') 
       else: 
        messages.add_message(request, messages.INFO, 'La confirmation du mot de passe est incorrect.') 
      else: 
       messages.add_message(request, messages.INFO, 'Une erreur est survenue pendant la modification.') 
     else: 
      form = ChangePasswordForm() 
     return render(request, 'password.html', locals()) 
    else: 
     from start.views import view_logon 
     messages.add_message(request, messages.INFO, 'Vous devez être connecté pour accéder à cette page.') 
     return redirect(view_logon) 

フォームがうまく動作し、パスワードの変更が行われます。しかし、データベースを見た後、新しいパスワードが十分にハッシュ化されていないようです。実際に新しいパスワードまたは古いパスワードでログインしようとすると、動作しません。

ありがとうございました。

+2

おそらく 'new_password'の引用符を削除するだけです:' update.set_password(new_password) '?:) – neverwalkaloner

+2

ええ、助けてくれてありがとう:)私は休憩が必要です^^ – GrandGTO

答えて

0

変更ライン、

update.set_password('new_password') 

に、

update.set_password(new_password) 

あなたはすべてのユーザーのための 'new_passwordを' などのパスワードを設定しました。だからあなたはログインできません。

set_passwordは、引数を文字列として取り、パスワードとしてハッシュします。

関連する問題