@Jora00777

Какие есть варианты реализации автоматической авторизации?

Здравствуйте.

Пишем проект на PHP (Laravel), возник спор, нужно мнение со стороны.

На данный момент стоит задача реализовать автоматическую авторизацию на сайте при переходе с ссылки в письме.
Т.е. человеку приходит письмо > он с него переходит в свой личный кабинет, без ввода паролей и так далее.

Как лучше технически реализовать данную задачу, какой подход будет наиболее оправданным и безопасным?
  • Вопрос задан
  • 263 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Слова "лучше" и "наиболее" здесь, конечно, неприменимы, как и в большинстве связанных с программированием вопросов.
Я на одном из проектов сделал это так:
  1. Есть таблица token_actions, куда записывается секретный токен, название действия (Enum) и его аргументы в json.
  2. Действия могуть быть многоразовым и единичными.
  3. У токена может быть ограничено время жизни.
  4. Есть классы, каждый из которых обрабатывают конкретное действие, но имеют один интерфейс.
  5. Среди них есть и класс LogIn, который как раз авторизует пользователя.
  6. Есть контроллер, который принимает токен и по нему получает действие, создаёт объект его обработчика и выполняет его (для этого и нужен стандартный интерфейс).
  7. В письма, собственно, вставляются ссылки на обработчик токенов.
  8. Ну и ещё немного мелкой логики, добавляющей красоты и удобства.

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

Вот, я вам даже часть кода подарю: https://gist.github.com/alexey-m-ukolov/9588dcefc9...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@beatleboy
Используйте токены jwtauth. Там все уже продумано
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы