Лучший способ для подтверждения ссылок по электронной почте для отправки идентификатора

У меня есть веб-сайт, который отправляет кому-то электронное письмо с подтверждением.

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

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

Есть ли какой-либо другой способ получить ссылку подтверждения в электронном письме для отправки информации, такой как имя пользователя и пароль, без того, чтобы она каким-либо образом попала в ссылку?
Возможно ли, например, иметь форму ввода в электронном письме? и отправить пароль как POST вместо GET?


person Sam    schedule 17.10.2008    source источник


Ответы (3)


Обычно это работает так: электронное письмо с подтверждением содержит ссылку, которая включает в себя какой-либо GUID (глобальный уникальный идентификатор). GUID связан с учетной записью пользователя. При нажатии на ссылку веб-приложение просто устанавливает флаг подтверждения и регистрирует пользователя, используя GUID, а не обычную комбинацию имени пользователя и пароля.

person John Topley    schedule 17.10.2008
comment
Как правило, стоит убедиться, что GUID является одноразовой выгодной сделкой, и что после того, как миссия будет выполнена, он не позволит этому GUID работать во второй раз. - person Phil Bennett; 17.10.2008
comment
есть ли причина заставлять пользователя также вводить свой пароль или имя пользователя на экране возврата? - person zsharp; 26.01.2010

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

Настройте обработчик http (cgi, php, servlet и т. д.) для получения запросов GET на основе URI, который выглядит примерно так: "/confirm_email/{hexdigest}" или "/confirm_email.php?code={hexdigest}"

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

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

Если вы хотите сделать его более надежным: когда пользователь проверяет свою электронную почту, измените шестнадцатеричный дайджест, чтобы он был просто хэшем самого адреса электронной почты без соли. Затем вы можете проверить, изменился ли чей-то адрес электронной почты и нуждается ли он в повторной проверке.

person Lex    schedule 17.10.2008

Вы можете передать GUID в письме. Этот конкретный GUID должен быть связан с пользователем. Затем, когда пользователь щелкает ссылку, идентификатор GUID отправляется обратно в приложение и может быть захвачен как QueryString. Извлеките GUID обновления, одобренного пользователем.

person azamsharp    schedule 17.10.2008