我正试图强制验证登录我的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
有人知道我在这里做错了吗?