【Django allauth】無効なアカウントエラーの対処法

※本サイトにはプロモーション・広告が含まれています。

当記事は、Djangoのallauthで、無機質な画面上に以下のエラーが出た人に向けて書かれています。

無効なアカウント アカウントが無効です

私も同じエラーに苦しみましたが、なんとか解決できたのでその方法をご紹介します。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

解決方法はこれ!

早速ですが、解決方法はこれです!

Userモデルのis_activeフィールドで、defaultをTrueにする!

以上!

原因は何なの?

こちらのエラーは、Userモデルをオリジナルにカスタマイズした際に出てくることが多いようです。

なぜなら原因が、Userモデル内のフィールド 「is_active」のデフォルト値をFalseにしていることだからです。

よって、is_activeフィールドのデフォルト値をTrueに戻せば解決します。

エラーに直面した背景

Djangoのallauth設定で、以下のように設定していました。

ACCOUNT_EMAIL_VERIFICATION = "mandatory"

Emailの確認作業を終えないと、ログインができない設定です。

詳しくは公式ドキュメントをどうぞ!

Eメールの確認作業をis_activeフィールドでおこなっているものだと思い込み、デフォルト値をFalseにしたのが間違いでした。

実際はこれが原因で正しい画面に行かないばかりか、確認メールすらも送られてませんでした

結果として、is_acitveフィールドのデフォルト値をTrueにすれば、「正しい画面へ移行 + 確認メールの受信」が確認できます。

解決していれば幸いです!!

次章では、ここで出てくる疑問「allauthがEmailVerificationをどのように管理しているのか?」を解説していきます。

Email Verificationの真実

EmailVerificationには、EmailAddressというモデルが用意されており、その中に「verified」フィールドがあったのです。

そのモデルのソースコードはこちら

つまり、ユーザーモデルのフィールドではなく、allauth独自のフィールドで管理しています。

もし手動で変更したい場合は、EmailAddressクラスのVerifiedフィールドでおこないましょう。

以下のとおりインポートし、verifiedを好きな値(True or False)に変更できます。

from allauth.account.models import EmailAddress

たとえば、紹介者がいる場合は、確認作業が不要などと設計できます。

以上!

補足の部分も長くなってしまいましたが、allauthエラーの一発解決!記事を終わりとさせていただきます

ありがとうとうございました!!!

タイトルとURLをコピーしました