LoginSignup
1

More than 3 years have passed since last update.

Djangoでパスワード変更すると、勝手にログアウトされる

Posted at

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:
        ...

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1