【问题标题】:How can I treat allauth password reset as email verification?如何将 allauth 密码重置视为电子邮件验证?
【发布时间】:2021-11-27 00:50:14
【问题描述】:
我的系统已经知道用户的电子邮件地址。当用户注册时,他们会收到来自 allauth 的错误消息:
用户已使用此电子邮件地址注册。
我建议用户在看到此消息时重置密码。但是,一旦他们重置了密码,allauth 就会触发电子邮件地址确认流程,因为ACCOUNT_EMAIL_VERIFICATION = True。
此时用户也进行电子邮件验证是不方便且不必要的。在这种情况下如何避免电子邮件验证?
【问题讨论】:
标签:
django
django-allauth
email-validation
change-password
【解决方案1】:
如果您知道用户在密码重置时只能拥有一个与他们关联的电子邮件地址,那么您可以监听密码重置信号并将电子邮件地址标记为已验证。这将防止 allauth 在密码重置后触发电子邮件验证流程。
例如,您可以将以下内容放入signals.py:
from django.dispatch import receiver
from allauth.account.models import EmailAddress
from allauth.account.signals import password_reset
@receiver(password_reset)
def auto_verify_email_address_on_password_reset(sender, request, user, **kwargs):
email_address = EmailAddress.objects.get_for_user(user, user.email)
if not email_address.verified:
email_address.verified = True
email_address.save()