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

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

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

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

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

運営者プロフィール

運営者プロフィールアイコン

現在はIT企業のプロダクトマネージャーとして、個人向け/社内向けシステムなど、複数のシステム開発・運営に携わっています。

Webサイト構築やECサイトの開発経験に加えて、PythonなどのプログラミングやSalesforceなどのクラウドアプリケーションに関する幅広い知識・経験を活かして「プログラミング初心者がスムーズに学べるサイト」を目指しています。

Githubでは、趣味で作成したアプリなどを公開しています。

https://github.com/Yulikepython/

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

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

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

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

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

解決方法はこれ!

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

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をコピーしました