在django-allauth中强制验证电子邮件会导致“ RelatedObjectDoesNotExist:EmailAddress没有用户”。错误

时间:2018-11-22 17:02:50

标签: django-allauth

我正试图强制验证登录我的Django应用程序的新用户的电子邮件。我为此使用django-allauth 0.37.1。

您可以通过重写下面属于django-allauth Provider类的方法来执行此操作。他们的源代码中给出了一个示例:

    def extract_email_addresses(self, data):
        """
        For example:

        [EmailAddress(email='john@example.com',
                      verified=True,
                      primary=True)]
        """
        return []

这是我用以下方法覆盖的内容:

   def extract_email_addresses(self, data):
       return [EmailAddress(email=data['email'].strip().lower(), verified=True, primary=True)]

通过设置verified=True,您可以自动验证电子邮件。问题是Django不允许我这样做。它引发:RelatedObjectDoesNotExist: EmailAddress has no user.

我认为这与用户对外键的数据库限制有关。制作电子邮件是必需的。唯一的问题是该用户尚不存在。对于我来说,创建用户我首先需要电子邮件。在数据库级别手动解除此限制似乎不是一个合适的解决方案。

我对django-allauth的设置是:

    ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
    ACCOUNT_EMAIL_REQUIRED = True
    ACCOUNT_USERNAME_REQUIRED = False
    ACCOUNT_USER_MODEL_USERNAME_FIELD = None
    ACCOUNT_CONFIRM_EMAIL_ON_GET = True
    ACCOUNT_LOGOUT_ON_GET = True
    ACCOUNT_AUTHENTICATION_METHOD = 'username'
    ACCOUNT_USER_MODEL_USERNAME_FIELD = 'username'
    ACCOUNT_UNIQUE_EMAIL=False

有人知道我在这里做错了吗?

0 个答案:

没有答案