(最終更新月:2021年12月)
「django-allauthのインストール・設定は終わったけどエラーでページが見れない!」
「user has no field named ‘username’を解決したい!」
というDjango初学者の方で「django-allauthを始めたばかり」という方へ向けた記事となります
当記事を通じて、
- django-allauthでEメールとパスワードによる認証へ変更する方法
について解説していきます
当記事はアプリ開発~公開までをご紹介しているシリーズの一記事になります
最終的には、下記リンク先のような日報アプリを開発、公開できるように進めていきます
興味のある方は下記よりシリーズをまとめたページへお進みください

✔初期費用ゼロ/月9,800円でWebデザインが学べる
デザインを習得するためには、客観的なフィードバックと改善が不可欠です。
以下の記事ではこんなWebデザインスクールをご紹介しています。
- 初期費用ゼロで、月々9,800円のみ
- オンラインで、教材が使い放題
- コンテストや実務案件にチャレンジして報酬もGETできる
デザナルはトップデザイナーからレビューがもらえる、格安のWebデザインスクールです。
詳細をまとめた記事もございますので、ぜひご覧ください。
現状
django-allauthのインストール・設定は問題なく完了してます

ただ、ログイン画面へ進むと、

エラー画面で先へ進むことができません
メールアドレスとパスワードでの認証へ変更したことが原因です
エラー解消のために、設定を加えていきましょう!
【必要最低限】4つの変数
まずは下記の4つの変数をsettings.pyへ追記しましょう
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ユーザー名が無いこととメールアドレスでログイン認証することを宣言しています
ログイン画面を開くと、

無事、開く事ができました
ただ、ログインしてみると、

ログイン時のリダイレクト設定がデフォルトのままで、
になっているのが原因で404エラーが出てしまいます
リダイレクト先を指定
「LOGIN_REDIRECT_URL」変数でログイン後のリダイレクト先を変更しましょう!
from django.urls import reverse_lazy
LOGIN_REDIRECT_URL = reverse_lazy('nippo-list')
「日報一覧ページ」へリダイレクトするよう指定しました
また、ログアウト時のリダイレクト先は「/」となっていますので、変更する必要があります
ACCOUNT_LOGOUT_REDIRECT_URL = reverse_lazy("account_login")
ログインページへ進むよう設定しました
【補足】おススメの設定「Eメール」の検証
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
「ACCOUNT_EMAIL_VERIFICATION」変数は、ログイン時にメールアドレスの確認が完了している必要があるかどうか、を定義します
デフォルトは「optional」となり、Eメール確認は行われますがログイン時に完了している必要はありません
「mandatory」とすることで、メールアドレスの確認が完了していないとログインできないような設定とすることができます
認証が終了してるかどうかは「メールアドレス」モデルクラス内の「verified」フィールドで判断されます

まとめ
ユーザーモデルクラスを変更し、メールアドレスとパスワードで認証するよう設定している場合は、django-allauthの設定に変更を知らせる必要があります
まとめると下記のとおりです
#ユーザーネームは使わない
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
#認証にはメールアドレスを使用する
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
#ログイン後のリダイレクト先を指定
from django.urls import reverse_lazy
LOGIN_REDIRECT_URL = reverse_lazy('nippo-list')
#ログアウト後のリダイレクト先
ACCOUNT_LOGOUT_REDIRECT_URL = reverse_lazy("account_login")
#メールアドレスが確認済みである必要がある
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ご自由にコピペしてお使いください
これで各ページには問題なくアクセスができますが、ユーザーの登録画面で進んでいくと、

と、エラーが、、、
これは登録後に確認メールを自動で送信してくれているのですが、メールの設定がされていないためエラーとなってしまいます
最終的には、メールを送信するよう設定しますが、いちいちメールを送っては確認しても面倒なので、別の方法を次回の記事でご紹介します
ローカル環境ではターミナル上にメールが表示されるよう設定していきましょう!
当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています
「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」
という方は必見です!
