当記事は、Djangoのallauthで、無機質な画面上に以下のエラーが出た人に向けて書かれています。
無効なアカウント アカウントが無効です
私も同じエラーに苦しみましたが、なんとか解決できたのでその方法をご紹介します。
解決方法はこれ!
早速ですが、解決方法はこれです!
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エラーの一発解決!記事を終わりとさせていただきます
ありがとうとうございました!!!