Иногда полезной функцией на сайте является одноразовая авторизация по ссылке . Например, у Вас своя служба поддержки, в которой есть закрытый раздел общения с пользователем. Он задаёт вопросы, Вы отвечаете. После каждого Вашего ответа пользователь получает письмо с уведомлением о том, что на его вопрос уже есть отве...

Одноразовая авторизация по ссылке

Иногда полезной функцией на сайте является одноразовая авторизация по ссылке. Например, у Вас своя служба поддержки, в которой есть закрытый раздел общения с пользователем. Он задаёт вопросы, Вы отвечаете. После каждого Вашего ответа пользователь получает письмо с уведомлением о том, что на его вопрос уже есть ответ. Он переходит по ссылке и вынужден авторизовываться, поскольку его вопрос закрыт от посторонних. Чтобы не создавать таких неудобств, делается специальная ссылка, которая отправляется всё в том же письме. При переходе по этой ссылке пользователь автоматически авторизуется, плюс попадает на соответствующую страницу со своим вопросом. Вот о реализации такой полезной возможности речь сегодня и пойдёт.

Задача состоит из нескольких шагов:

  1. Сформировать ссылку.
  2. Отправить её на e-mail.
  3. При переходе по ссылке авторизовать пользователя и перенаправить на нужную страницу.
  4. В целях безопасности сделать ссылку одноразовой.

Для этого нам потребуется таблица:

  • id - уникальный идентификатор.
  • user_id - id пользователя, который должен быть авторизован.
  • key - секретный ключ, который будет находиться в ссылке в виде GET-параметра.
  • r - адрес страницы, куда будет совершён переход после авторизации.

Теперь разберём алгоритм скрипта, который будет вызываться перед отправкой письма пользователю:

  1. Получаем id пользователя, которому мы хотим создать ссылку и которому мы будем отправлять письмо.
  2. Генерируем случайный ключ, например, с помощью функции uniqid().
  3. Формируем адрес страницы, на который должен попасть пользователь после перехода по одноразовой ссылке.
  4. Добавляем в таблицу новую запись с данными полученными в предыдущих пунктах.
  5. Формируем ссылку вида: http://ваш_сайт/login.php?key=сгенерированный_ключ.
  6. Отправляем пользователю письмо с необходимой информацией и созданной ссылкой.

Дальше начинается работа скрипта login.php:

  1. Считываем значение key.
  2. По значению key выбираем запись из таблицы.
  3. Если записи не найдено, значит, ссылка уже была использована, либо является поддельной.
  4. По user_id в записи получаем логин и пароль из таблицы с пользователями и авторизуем его.
  5. Удаляем запись из таблицы с ключами.
  6. Делаем редирект по ссылке из поля "r" у записи.

Вот такой достаточно прозрачный алгоритм одноразовой авторизации по ссылке Вы можете сделать у себя на сайте.

А если Вы хотите научиться не только создавать, но и реализовывать алгоритмы на PHP, то стоит посмотреть этот курс.