Одноразовая авторизация по ссылке
Иногда полезной функцией на сайте является одноразовая авторизация по ссылке. Например, у Вас своя служба поддержки, в которой есть закрытый раздел общения с пользователем. Он задаёт вопросы, Вы отвечаете. После каждого Вашего ответа пользователь получает письмо с уведомлением о том, что на его вопрос уже есть ответ. Он переходит по ссылке и вынужден авторизовываться, поскольку его вопрос закрыт от посторонних. Чтобы не создавать таких неудобств, делается специальная ссылка, которая отправляется всё в том же письме. При переходе по этой ссылке пользователь автоматически авторизуется, плюс попадает на соответствующую страницу со своим вопросом. Вот о реализации такой полезной возможности речь сегодня и пойдёт.
Задача состоит из нескольких шагов:
- Сформировать ссылку.
- Отправить её на e-mail.
- При переходе по ссылке авторизовать пользователя и перенаправить на нужную страницу.
- В целях безопасности сделать ссылку одноразовой.
Для этого нам потребуется таблица:
- id - уникальный идентификатор.
- user_id - id пользователя, который должен быть авторизован.
- key - секретный ключ, который будет находиться в ссылке в виде GET-параметра.
- r - адрес страницы, куда будет совершён переход после авторизации.
Теперь разберём алгоритм скрипта, который будет вызываться перед отправкой письма пользователю:
- Получаем id пользователя, которому мы хотим создать ссылку и которому мы будем отправлять письмо.
- Генерируем случайный ключ, например, с помощью функции uniqid().
- Формируем адрес страницы, на который должен попасть пользователь после перехода по одноразовой ссылке.
- Добавляем в таблицу новую запись с данными полученными в предыдущих пунктах.
- Формируем ссылку вида: http://ваш_сайт/login.php?key=сгенерированный_ключ.
- Отправляем пользователю письмо с необходимой информацией и созданной ссылкой.
Дальше начинается работа скрипта login.php:
- Считываем значение key.
- По значению key выбираем запись из таблицы.
- Если записи не найдено, значит, ссылка уже была использована, либо является поддельной.
- По user_id в записи получаем логин и пароль из таблицы с пользователями и авторизуем его.
- Удаляем запись из таблицы с ключами.
- Делаем редирект по ссылке из поля "r" у записи.
Вот такой достаточно прозрачный алгоритм одноразовой авторизации по ссылке Вы можете сделать у себя на сайте.
А если Вы хотите научиться не только создавать, но и реализовывать алгоритмы на PHP, то рекомендую посмотреть этот курс.
-
- Михаил Русаков
Комментарии (5):
Большое спасибо!
Ответить
Михаил, а вот вы во многих своих статьях пишете что алгоритм прозрачный, очень простой или легкий для вас. А вот, что для вас тяжело?
Ответить
Вещь действительно полезная
Ответить
Неплохо было бы что бы у вас на сайте это срабатывало))
Ответить
Я конечно задам глупый вопрос. Но скиньте статьи про генерацию ссылок, или подскажите в каком направлении искать.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.