Изменение адреса электронной почты пользователя - PullRequest
5 голосов
/ 07 июня 2011

Я бы хотел, чтобы пользователь мог изменить свой адрес электронной почты. Пользователь будет менять свой адрес электронной почты, после чего на этот адрес будет отправлено электронное письмо со ссылкой для подтверждения, после того как пользователь щелкнет ссылку, он изменит свой адрес электронной почты в базе данных.

Я знаю, что django-generic-подтверждение имеет такие подтверждения, но я хотел бы попробовать это сделать самостоятельно.

Чтобы изменить адрес электронной почты, мой код будет:

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 ]

6 голосов
/ 07 июня 2011

Это довольно просто. То, что вы хотите сделать, это написать приложение, по крайней мере, с моделью, которая выглядит так:

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

Заполните auth_key с помощью UUID4, и вы можете обращаться с ним так же, как с полем slug в вашем urlconf.

Затем напишите представление, которое принимает ключ auth_key, ищет его в базе данных и изменяет адрес электронной почты пользователя на new_email. Удалите запись, когда закончите.

Для получения бонусных баллов добавьте к нему срок действия и иногда удаляйте все записи старше одного дня.

Вы можете также подумать о системе типов секретных вопросов. В качестве основной причины, по которой многие люди могут захотеть изменить свою электронную почту, является то, что старая больше не существует. Например, уход из компании, исчезновение почтового хоста (теперь это менее распространено) и т. Д. И т. Д. И т. Д.

0 голосов
/ 07 июня 2011

Как мне отложить смену электронной почты в БД до тех пор, пока пользователь не подтвердит свою электронную почту?

Это кажется глупым. Вы ждете, пока они не подтвердят электронную почту. Может быть, это не то, что вы на самом деле спрашиваете.

А как мне создать ссылку, которая активирует электронную почту для этого процесса?

Это не имеет большого смысла. Предположительно, вы спрашиваете, как заполнить **link**.

Если это так, для этого предназначена функция Django reverse().

  1. Для этого напишите функцию просмотра.

  2. Выберите разумный путь URL для функции просмотра.

  3. Используйте reverse для создания полного URL-адреса, который вставляется в электронное письмо.

...