gpt4 book ai didi

django-allauth 在有/没有验证的情况下更改用户电子邮件

转载 作者:行者123 更新时间:2023-12-03 00:30:15 33 4
gpt4 key购买 nike

我正在使用普通的 django-allauth,没有任何社交帐户。每个用户都应该有一个与其帐户关联的电子邮件地址,即用于注册/验证的电子邮件地址。我想让我的用户能够更改此电子邮件。

所以我的第一个问题是,我是否应该通过发送验证电子邮件来再次验证新电子邮件?我的直觉告诉我,我最好验证这封新电子邮件。但我对此没有真正的论据。

我的第二个问题是,如果想要验证这一点,django-allauth 是否已经以某种方式支持该过程?我已经看到了 EmailView 和 AddEmailForm。但这些都是基于一个帐户可以拥有多个电子邮件地址的假设(这不是我想要的)。

谢谢

最佳答案

我认为应该验证新的电子邮件地址。如果您的应用程序定期发送电子邮件,您不希望仅向用户输入的任何电子邮件地址发送大量电子邮件。

我所做的是允许多个电子邮件地址,直到第二个电子邮件得到验证。然后,按照 elssar 的建议监听 django-allauth 的 email_confirmed 信号。地址验证后,将新电子邮件地址设置为主电子邮件地址,然后删除任何先前的 EmailAdess。这是我最终所做的一个简化示例:

型号:

from django.dispatch import receiver
from allauth.account.models import EmailAddress
from allauth.account.signals import email_confirmed

class CustomUser(models.Model):
...
def add_email_address(self, request, new_email):
# Add a new email address for the user, and send email confirmation.
# Old email will remain the primary until the new one is confirmed.
return EmailAddress.objects.add_email(request, self.user, new_email, confirm=True)

@receiver(email_confirmed)
def update_user_email(sender, request, email_address, **kwargs):
# Once the email address is confirmed, make new email_address primary.
# This also sets user.email to the new email address.
# email_address is an instance of allauth.account.models.EmailAddress
email_address.set_as_primary()
# Get rid of old email addresses
stale_addresses = EmailAddress.objects.filter(
user=email_address.user).exclude(primary=True).delete()

浏览次数:

def update_user_details(request):
user = request.user
new_email = request.POST.get('new_email')
user.custom_user.add_email_address(request, new_email)
...

关于django-allauth 在有/没有验证的情况下更改用户电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755102/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com