パスワードを変更したり、リセットする実装を一から作るのは大変ですが、djangoではこのパスワード変更・リセットの機能があらかじめ備えられています。
そこで今回は、パスワードの変更・リセットの実装方法についてみていきましょう。
パスワードの変更画面は、urlpatternに一行追加するだけ
パスワードの変更の実装は、urlpattens.pyファイルに一行コードを追加するだけで実装できます。
なぜコードを追加するだけで実装できるのかというと、djangoがすでにパスワード変更用のページを作ってくれているからです。
つまり、そのページにアクセスするためのurlを設定するだけで、パスワード変更画面を実装することができるのです。
実際にコードを書いていきましょう。
-BASE/project/urls.py
コードurlpatterns = [
...
path('accounts/', include('django.contrib.auth.urls')),
...
]
これで設定は完了です。
django.contrib.auth.urlsは、app.urlsのようにアプリのurls.pyファイルを参照するように指示していることと同じです。
つまり、django.contrib.auth.urlsは、authアプリの中のurls.pyファイルを参照してください。と指示しているのです。
authアプリの中のurls.pyファイルには、'password_change'というurlにアクセスすることでパスワード変更画面が表示されるように設定されています。
つまり、localhost:8000/accounts/password_changeというurlにアクセスすることによってパスワードを変更する画面を表示させることができるようになるのです。
実際にlocalhost:8000/accounts/password_changeにアクセスしてみましょう。
古いパスワード、新しいパスワード、新しいパスワードの確認欄があるページを確認することができました。
画面の表示を変えるには?
ただ、このパスワード変更画面はdjangoがあらかじめ準備しているものであり、変更したい場合もあるかもしれません。
ですので、ここからは画面の表示を変更する方法を見ていきましょう。
画面の表示を変更するためには、registrationフォルダを作り、その中でpassword_change_form.htmlファイルと、password_change_done.htmlファイルを作りましょう。
上記は、djangoがデフォルトで設定している内容です。
つまり、djangoはpassword_changeのurlを受け取ると、表示するテンプレートとして、まずはregistration/password_change_form.htmlファイルを探すように設定されているのです。
このファイルがなかった場合、デフォルトのパスワード変更画面が表示されます。
パスワードのリセット方法も同じ
パスワードのリセット方法もパスワードの変更と同じです。
つまり、urlpatternsにauth.urlsを追加するだけでパスワードのリセットを実装することができます。
パスワードをリセットするための画面は'password_change'です。
つまり、localhost:8000/accounts/passwod_resetとういurlにアクセスすることでパスワードリセット画面が表示されるようになります。
ただし、djangoのデフォルトの機能ではパスワードのリセットをするには、ユーザーに送られたメールのurlをクリックしなければいけません。
メールの詳しい設定方法については、メールを送る方法を解説という記事を参考にしてください。