Django==2.2.12でのお話です。
ログインした状態で、自作の画面からユーザパスワードを変更したあと
・別のページに遷移しようとすると、まずログイン画面に飛んでしまう
・普段なら問題のないサーバーへのリクエストがエラーを返す
といった状況を不思議に思ったアナタ!
実はカスタムのパスワード変更画面を利用している場合、パスワード変更後に強制的にログアウト状態になってしまうんですね。
それまで使用していたセッションが使われなくなるのが原因です。
Djangoが用意しているPasswordChangeView
なんかを使用している場合は、パスワード変更後に自動で新しいセッションを作成してくれるので、ログイン状態が続いてくれます。
カスタム画面でもそうしたい!という場合はupdate_session_auth_hash()
関数を使うといいよ。
といったことが、ドキュメント
https://docs.djangoproject.com/en/3.0/topics/auth/default/#session-invalidation-on-password-change
に書かれていました...
ついでに、このドキュメントに書かれている使用例も貼っておきます。
from django.contrib.auth import update_session_auth_hash
def password_change(request):
if request.method == 'POST':
form = PasswordChangeForm(user=request.user, data=request.POST)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
else:
...