更改用户电子邮件地址

时间:2011-06-07 00:26:38

标签: django email-integration email-validation

我想允许用户更改其电子邮件地址。用户将更改其电子邮件地址,然后将带有链接的确认电子邮件发送到该地址,在用户单击该链接后,它将更改其在数据库中的电子邮件地址。

我知道django-generic-confirmation处理这样的确认,但我想尝试自己做。

要更改电子邮件,我的代码将是:

User.objects.get(username=username).update(email=request.POST['email'])

要发送电子邮件到该地址,我会:

if 'Change Email' in request.POST.values():
    from django.core.mail import send_mail
    send_mail(
          'Confirm email change',
          'Click this **link** to confirm your change of email',
          'from@example.com',
          [request.POST['email']]
     )

只有在用户确认了他的电子邮件之后,我才会延迟更改数据库中的电子邮件?我将如何创建一个激活此过程的电子邮件的链接?谢谢。

2 个答案:

答案 0 :(得分:6)

这很简单。你想要做的是编写一个至少具有这种模型的应用程序;

class EmailChangeAuth(models.Model):
    auth_key = models.CharField(max_length=42)
    user = models.ForeignKey(User)
    new_email = models.CharField(max_length=256)

使用UUID4填写auth_key,您可以像对待urlconf中的slug字段一样对待它。

然后编写一个视图,该视图接受auth_key,在数据库中搜索该视图,并将用户的电子邮件更改为new_email。完成后删除记录。

对于奖励积分,请在其中加入过期时间,并偶尔清除超过一天的所有记录。

您可能还想考虑安全问题类型系统。很多人可能想要更改电子邮件的主要原因是旧电子邮件不再存在。例如,离开公司,邮件主机消失(现在不常见)等等。

答案 1 :(得分:0)

  

只有在用户确认了他的电子邮件之后,我才会延迟更改数据库中的电子邮件?

这看起来很傻。你等到他们确认电子邮件。也许这不是你真正要求的。

  

我如何创建一个激活此流程电子邮件的链接?

这没什么意义。据推测,你问的是如何填写**link**

如果是这样,那就是Django reverse()函数的用途。

  1. 为此编写一个视图功能。

  2. 为视图功能选择合理的URL路径。

  3. 使用reverse生成插入电子邮件的完整网址。