как генерировать ссылку для отмены подписки от электронной почты

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

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

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

Где я должен запустить для реализации этого?

14
задан Patrick 2 August 2010 в 11:24
поделиться

2 ответа

Ваши ссылки для отписки могут выглядеть следующим образом: http://host/application/unsubscribe?address=example@example.com&token=598bbdf39bc8f27b07fe85b6a7dd8decef641605

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

$ echo "secret token example@example.com" | sha1sum
598bbdf39bc8f27b07fe85b6a7dd8decef641605  -

Часть секретный токен будет зафиксирована в вашем приложении, а example@example.com должен соответствовать адресу электронной почты.

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

15
ответ дан 1 December 2019 в 13:32
поделиться

Если у вас есть модель для 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)

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

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

3
ответ дан 1 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: