2016-03-22 12 views
2

次のコードの結果、新しい有効なパスワードを入力したときにユーザーがログアウトするのはなぜですか?Djangoのパスワード変更

@login_required 
def change_password(request): 
    pass_form = PasswordChangeForm(user=request.user) 
    if request.method == 'POST': 
     pass_form = PasswordChangeForm(user=request.user, data=request.POST) 
     if pass_form.is_valid(): 
      pass_form.save() 
      return render(request,'coursework/profile.html', 
             {'pass_form' : pass_form, 
             'pass_msg' : 'Password Updated'}) 
    return render(request, 'coursework/new_password_form.html', 
           {'form': pass_form}) 

答えて

3

それはジャンゴで実装セキュリティ対策だし、それはデフォルトの設定で有効になっている - とすぐに、ユーザが自分のパスワードを変更して、既存のすべてのセッションが無効になります。あなたは有効な現在のセッションを維持するためにpass_form.save()後、あなたのビューに以下を追加する必要がありますhttps://docs.djangoproject.com/en/1.9/topics/auth/default/#session-invalidation-on-password-change

を参照してください:

update_session_auth_hash(request, pass_form.user) 
2

ジャンゴinvalidates sessions when the password is changed。これを防ぐにはupdate_session_auth_hashに電話する必要があります。

ご自身でchange_passwordメソッドを記述する必要はありません。 Djangoにはpassword_changeメソッドが付属しています。このメソッドはセッションの更新を行います。

関連する問題