Подтвердить что ты не робот

Как создать ссылку для отмены подписки на электронную почту

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

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

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

С чего начать, чтобы реализовать это?

4b9b3361

Ответ 1

Ваши ссылки для отписки могут выглядеть так: http://host/application/[email protected]&token=598bbdf39bc8f27b07fe85b6a7dd8decef641605

Создайте токен, используя адрес электронной почты и волшебный токен. В идеале вы бы использовали HMAC с SHA256, но даже просто sha1 должен быть "достаточно хорошим":

$ echo "secret token [email protected]" | sha1sum
598bbdf39bc8f27b07fe85b6a7dd8decef641605  -

Часть secret token будет исправлена ​​в вашем приложении, а [email protected] должна соответствовать адресу электронной почты.

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

Ответ 2

Если у вас есть модель для EmailTemplate и модель для подписчика, то ваш код может выглядеть примерно так:

@email_template = EmailTemplate.find(3)
@email_template.subscribers.each do |subscriber|
  Notifier.deliver_template(:email_template=>@email_template, :subscriber=>subscriber)
end

поэтому вы можете перейти на

email_delivery = EmailDelivery.create(:email_template=>@email_template, :subscriber=>subscriber)
Notifier.deliver_template(email_delivery)

И затем email_delivery before_create генерирует токен. Генератор случайных паролей для электронной почты должен быть хорошим. SecureRandom делает хорошую работу в случайных токенах: p SecureRandom.hex(10) #=> "52750b30ffbc7de3b362"

Включите этот токен email_delivery в свой адрес электронной почты, а затем выполните поиск, основанный исключительно на этом.