2011-02-06 3 views
2

Я фактически создаю веб-приложение с помощью PHP и обращаюсь за помощью, проверяя пользователя. Как и на некоторых веб-сайтах, при регистрации вам отправляется электронное письмо с подтверждением. Как реализовать это в PHP? Все, что я знаю, это то, что я должен использовать функцию PHP mail() для отправки электронной почты. Пожалуйста, помогите. Необходимо. Благодарю. :)проверить пользователя по электронной почте в PHP

ответ

1

как у нас с CSRF защитой вы создаете уникальный токен.

$token = md5(uniqid(rand(), TRUE)); 

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

Чтобы сделать его более безопасным, вы можете точно так же, как с помощью CSRF добавить ограничение по времени.

+1

Почему, черт возьми, ваш пробег через md5. Вы просто создали уникальный ключ, не столь уникальный. – Petah

+0

lol Это достаточно уникально для этого прецедента. – Alfred

+1

Спасибо, Альфред. Вы получили мне правильное решение, чтобы продолжить работу над этой задачей. Ура! :) – ikartik90

3

Это очень широкий вопрос, так что мы можем дать только широкий ответ, но общий метод сделать это

  1. вставить адрес электронной почты пользователя в базе данных, но пометить его как непроверенные
  2. создать уникальный регистрационный ключ и вставить его в другую таблицу только для этих ключей
  3. отправить по электронной почте на адрес электронной почты пользователя с ссылкой на ваш сайт, который проходит этот регистрационный ключ в качестве аргумента (например, http://site.com/confirm.php?key=1234)
  4. когда этот URL-адрес ited, отметьте адрес электронной почты как подтвержденный и удалите временно созданный регистрационный ключ
+0

Спасибо, Патрик. Это очень помогает. Все трое (Джо, вы и Альфред) дали полное решение моего действительно «широкого» вопроса. Приветствия. Оставайся на связи. :) – ikartik90

+0

Откуда вы знаете, что пользователь посетил URL? Или, это уникальный URL-адрес, предоставляемый каждому пользователю? – ggkmath

+0

@ggkmath из-за шага 2, «создайте уникальный регистрационный ключ». Если вы используете последовательные номера, убедитесь, что у кого-то есть возможность догадаться о следующем в последовательности, но если вы сделаете что-то вроде суммы случайного числа md5, никто не собирается это догадываться. – Patrick

7

Ответ Patricks правильный, хотя я хочу указать, что есть другие возможности!

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

Вы также можете воспользоваться односторонним хешированием.

Например, отправьте пользователю код md5('my-secret-application-token'.$user_email_adress).

Вы можете проверить это точно так же, но не нужно хранить секретный код.

+1

Если я украду 'my-secret-application-token', тогда я могу войти как любой пользователь, которого я бы хотел: P. – Alfred

+1

true @Alfred это причина, почему пароли, связки ключей, жетоны и все эти вещи были созданы! было бы скучно, если бы там тебя не украли. –

+0

Спасибо, Джо. Это моя проблема до конца. Спасибо за помощь. Оставайся на связи. Приветствия. :) – ikartik90

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