django all-auth でEmailAddress matching query does not exist.が出る

django all-auth EmailAddress matching query does not exist.
django all-auth EmailAddress matching query does not exist.

 

DoesNotExist at /rest-auth/login/

EmailAddress matching query does not exist.

Djangoのall-authを使用してAPI開発をしている時に起こったエラーです。

DjangoのUserモデルは変更していない、きちんとユーザーの登録もしているにも関わらずエラーが発生してしまうということになってしまったのです。

settings.pyの

ACCOUNT_EMAIL_REQUIRED = True

 

をFalseにするとなんとなくわかるのですが、

 

assert (
    not self.AUTHENTICATION_METHOD == self.AuthenticationMethod.EMAIL
) or self.EMAIL_REQUIRED

ここの部分でエラーが発生してしまうのです。

そうこうしていってみていってみると、

これはDjangoのデフォルトで入っているUserモデルの他の部分も使用してUserを管理しているためであることが原因です。

 

具体的なaccount_emialaddressテーブルを見てもらうとわかりますが、Emailはこちらの方でも管理されるようになっています。

そのため、まずここにも認証に使用するEmailが存在することが必要になるのです。

 

次に、ここにメールアドレスが追加されたとしても、アカウント作成時にEmailを使用した2段階認証を設定していると、

verifiedにフラグを立てる(1を設定する)必要があります。

 

 

こうして、実際にログインしてみると、

 

きちんとキーが発行されてくるというわけですね。

 

 

コメントを残す