2016-10-27 2 views
0

У меня есть контроллер, который отправляет электронное письмо с массивом переменных, который включает в себя имя человека и метку времени, в которую они сделали запрос. Электронная почта отправляет html-файл, а в html-файле есть «Нажмите здесь, чтобы удалить bla bla bla». линия. Когда пользователь нажимает на ссылку, ссылка отправит их контроллеру, который удалит их имя из моей базы данных.Как сделать свою собственную кнопку «отписаться» в электронном письме?

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

Click <a href='https://xxx.xx.xxx.xxx:8000/web/misc/request/delete/<?php echo $data['timestamp']; ?>/<?php echo $data['name']; ?>'> here</a> to delete bla bla bla. 

Тогда, в моем файле маршрутизации, я буду иметь:

Route::get('/web/misc/request/delete/{time}/{name}', '[email protected]'); 

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

Но кто-то может просто просто изменить имя или временную метку в URL-адресе, не так ли?

Это заставило меня хотеть использовать POST, но я не совсем уверен, как я должен это делать в этом сценарии. Я мог бы просто создать форму, установить некоторые входы в скрытые, а затем сохранить имя и временную метку в эти входные значения. Я еще не пробовал это, потому что это звучит довольно хаки. Использование сеанса также не будет работать в этом случае, верно? Будет ли это подходящее время для использования файлов cookie? Или я должен использовать какие-то ключи?

+0

В URL-адрес пользователя вводится уникальный идентификатор, который невозможно/непрактично угадывать. Или вы подтверждаете свое подтверждение по электронной почте. – deceze

+0

Один из способов заключается в том, что каждое электронное письмо, которое вы собираетесь отправлять, создало бы уникальный идентификатор или указатель, и поместил бы это в вашу базу данных и приложил бы это к URL-адресу, а затем запросил бы ваш db для этой записи. Очень маловероятно, что они случайным образом изменят руководство и сопоставляют другую запись. – Chris

+0

Я никоим образом не специалист, но как насчет хранения случайной строки для каждого адреса электронной почты и когда вы хотите удалить, проверьте, правильно ли указана эта строка по URL-адресу? – lucidbrot

ответ

4

Но кто-то может легко просто изменить имя или временную метку в URL-адресе, не так ли?

Да

Это заставило меня хотеть использовать POST

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


Генерировать случайные буквенно-цифровые строки для использования идентификаторов. Сохраните его в своей базе данных с остальными данными о подписчике. Включите его в URL.

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

Смежные вопросы