【Djangoエラー一発解決!】allauthで「無効なアカウント」エラーが出てきたときの対処法

lightDjango

こちらをご覧の方はdjango-allauthを使い、無機質な画面上に

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

と大きく書かれてしまった方々で間違いないでしょうか?

私も同じエラーに苦戦しまして、何とか解決できました

下記にて同じ問題に遭遇した皆様の悩みを一発解決!すべく解説させて頂きます!

解決方法!

早速ですが、解決方法は、

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

以上!

原因

いきなり、ストレートに伝えすぎましたでしょうか?

こちらのエラーに遭遇した皆様は、Userモデルをオリジナルにカスタマイズしてないでしょうか?

もしくは、少なくともUserモデル内のフィールド 「is_active」(もしくは「active」)のデフォルト設定をFalseにしてませんか?

ズバリ、それが原因だったんです!

エラーに直面した背景

僕自身、allauthの設定で、

EmailVerificationmandatory(Emailが確認されないとログインできない)

に設定しています

ACCOUNT_EMAIL_VERIFICATION = "mandatory"

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

実はそのVerificationの仕組みを僕自身が勝手にis_activeフィールドで行われているのだろうという仮説の上、Userモデル内のis_activeフィールドでdefault=Falseにしていました

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

ですので、

Userモデルのis_activeフィールド、deafult=Trueにする

が「無効なアカウント」エラーの解決策です!

すると、正しい画面へ移行 + メールがきちんと送られてきませんでしょうか??

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

ただここで、それだともう一つの疑問が湧いてきませんか?

それは、このallauthモジュールがEmailVerificationをどのように管理しているのか?

です

これも合わせて調べましたので、補足として下記にて解説します!

Email Verificationの真実

僕自身、どのような仕組みになっているのだろうと色々とドキュメントなどを読み下記の事実を突き止めました!

allauthには、EmailAddressというモデルが用意されており、その中のverifiedフィールドで管理しています!

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

このBooleanFieldでEmailがVerifiedされたかどうかを管理しているんですね!!

ですので、もし意図的にTrue、Falseに変更したい場合もこちらへアクセスし自身のコードで変更も可能だということになります

from allauth.account.models import EmailAddress

でインポートし、verifiedを好きな値(True or False)に変えれば良さそうですね!

人からの紹介で登録した人にはVerificationは不要!

などとサイトの意向に合わせて使用することが可能になります!

以上!

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

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

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