как проверить, что пользователь нажал на ссылку в письме, которое я ему отправил?
Это более сфокусированный вопрос, вызванный более ранняя публикация здесь. Мне нужно аутентифицировать адрес электронной почты пользователя, доказав, что у него/нее есть доступ к нему. Я скопировал ниже общую аутентификацию электронной почты, которую вы ожидаете увидеть при присоединении к форуму разработчика или группе пользователей. В процессе регистрации вы предоставляете свой адрес электронной почты, а затем получаете электронное письмо с просьбой нажать на что-то, чтобы подтвердить свой адрес электронной почты.
Мне нужно закодировать все, что угодно происходит, когда пользователь нажимает на ссылку в письме. Поэтому мой вопрос-как мне это сделать?
какие технологии задействованы? Кто-нибудь проводит меня по ступенькам? Я предпочитаю язык сценариев Java или Linux, такой как bash. Еще лучше, есть ли какое-либо программное обеспечение, разработанное для этой цели, которое я могу установить на своем сервере Linux и каким-то образом интегрировать его в свою базу данных? Как это делается на практике? Я не хочу изобретать что-то новое, если оно уже доступно.
To confirm your email address of:
youremail@yourdomain.net
please send a short reply to this address:
users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com
Usually, this happens when you just hit the "reply" button.
If this does not work, simply copy the address and paste it into
the "To:" field of a new message.
or click here:
mailto:users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com
This confirmation serves two purposes. First, it verifies that I am able
to get mail through to you. Second, it protects you in case someone
forges a subscription request in your name.
Some mail programs are broken and cannot handle long addresses. If you
cannot reply to this request, instead send a message to
<users-request@listdomain.com> and put the
entire address listed above into the "Subject:" line.
3 ответов
в вашей базе данных пользователей вам нужно иметь промежуточную таблицу пользователей (или в основной таблице пользователей добавьте столбец, указывающий, активен ли пользователь и по умолчанию индикатор "нет"). Когда пользователь впервые регистрируется, вы генерируете уникальный хэш-код из части информации пользователя, например, используйте md5 для первичного ключа пользователя и имени (или другого набора переменных пользователя, которые вы можете получить обратно путем дешифрования) . Сделайте этот хэш-код параметром строки запроса в ссылке, которую вы отправляете пользователю. Наконец, когда пользователь нажимает на ссылку, получает хэш-код из строки запроса, расшифровывает его и сопоставляет расшифрованные значения с пользовательской строкой в вашей базе данных. Если совпадение найдено, установите для индикатора "active" значение true и presto. Кроме того, если используется промежуточная таблица, переместите запись пользователя в таблицу "активные пользователи", в которой выполняется авторизация.
отвечая на уникальное письмо, чтобы проверить, что чья-то электронная почта имеет врожденный недостаток, ее можно подделать (если вы не проверяете заголовки и ip). Например, я посещаю ваш сайт для регистрации. Вы говорите мне отвечать на users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com
. Я использую mail()
функция с помощью спам-бота для ответа. игра окончена. Цель побеждена.
вместо этого, вы можете отправить мне ссылку для подтверждения на мой номер регистра. Что-то вроде example.com/verify?userid=1&hash=67gk65fs6714fgsHguj
в таблице users:
id|username|status|onetimehash
--+--------+------+-------------------------
1|testuser| 0 |67gk65fs6714fgsHguj
теперь, в вашем проверить вызов проверьте имя пользователя и хэш. Если они совпадают со значениями в вашей БД, вы можете безопасно проверить пользователя. Для генерации хэша вы можете взять значение md5 или sha1 имени пользователя, смешанное с некоторой солью, такой как временная метка или некоторое случайное число.
обновление
Если вы идете с первым решением, я.e, захват ответа пользователя для проверки электронной почты, вам придется настроить свой собственный почтовый сервер. Fetchmail может помочь вам. Вам придется программно читать заголовки электронной почты и извлечь необходимую информацию из <to>,<from> or <subject>
поля. Как userid=1496854427 и hash=ckdpbmhncdlkjadkajfpecc. Вы мая нужно регулярное выражение в этом процессе. Как только у вас есть эти значения, это довольно просто, проверьте их на значения базы данных.
итог: первый метод не просто более утомителен, он также более уязвим, чем последний. Большинство webapps используют 2-е решение, как его чище и мудрее.
Я знал одну ссылку, которая имеет лучший ответ, данный BalusC
Вот ссылка:лучший ответ.
Я реализовал это в своем проекте. Надеюсь, это поможет другим.