Как реализовать гостевой режим (анонимные пользователи) и перевод в пользователей Logto
Узнай, как реализовать гостевой режим и преобразовать гостей в пользователей Logto, используя трёхфазный паттерн: управление гостевыми сессиями, аутентификация через OIDC и безопасное слияние гостевых данных с аккаунтами пользователей.
YijunDeveloper
Хватит тратить недели на аутентификацию пользователей
Запускайте безопасные приложения быстрее с Logto. Интегрируйте аутентификацию пользователей за считанные минуты и сосредоточьтесь на вашем основном продукте.
Во многих приложениях пользователи могут протестировать функции до регистрации. Вспомни корзины покупок, черновики документов или сохранённые настройки. Пользователи ожидают, что этот «гостевой режим» просто работает.
Но если ты используешь Logto (или любого провайдера OIDC) для аутентификации, возникает вопрос: как обрабатывать этих анонимных пользователей?
Краткий ответ: Logto отвечает за аутентификацию, твое приложение — за гостевые сессии. Это разные задачи.
В этой статье я покажу простой трёхфазный паттерн реализации гостевого режима c Logto. Ты узнаешь, как:
Управлять гостевыми сессиями на бэкенде
Давать гостям регистрироваться через Logto
Сливать гостевые данные в реальный аккаунт пользователя
Можно ожидать, что Logto поддерживает «анонимный вход». Что-то вроде: вызвал API, получил токен, не нужно взаимодействие с пользователем.
Но это не так работает в OIDC. Вот почему:
OIDC строится вокруг согласия пользователя. Основная идея — подтвердить «кто этот человек?». Анонимный токен значил бы «это кто-то, но мы не знаем кто» — что противоречит самой концепции.
Представь это так:
Аутентификация = подтверждение личности («кто ты?»)
Отслеживание сессии = запоминание действий («что ты сделал?»)
Гостевой режим — про отслеживание сессии, а не аутентификацию. Значит, это не задача системы авторизации.
И это даже хорошо. Это гарантирует чёткое разделение:
Logto отвечает за идентичность (регистрация, вход, токены)
Твоё приложение — за гостевые сессии (до появления идентификации)
Пусть каждая система выполняет своё предназначение.
Когда пользователь нажимает «Зарегистрироваться» или «Войти», запускается стандартный Logto OIDC flow.
Guest ID сохраняется в cookie/хранилище на время этого процесса. После успешной аутентификации у фронтенда есть:
Access token от Logto (идентификация пользователя)
прошлый guest ID (гостевые данные)
Фаза 3: Безопасное слияние гостевых данных с аккаунтами#
Теперь связываем всё. Вызови API бэкенда с обеими сущностями:
Бэкенд должен проверить оба токена перед слиянием:
Проверь access token → получи user ID. См. Проверка access tokens, как это сделать в Logto.
Проверь guest ID → убедись, что это действительная гостевая сессия, которую выдал именно твой бэкенд. Это критически важно — никогда не доверяй guest ID от клиента без верификации.
Только после успешной проверки:
Слить гостевые данные с аккаунтом пользователя
Инвалидировать гостевую сессию
Логика слияния зависит от задач бизнеса. Корзина? Объединить товары. Черновики? Передать владение. Решай сам.
Как защитить endpoint слияния с помощью проверки токена#
Точка слияния — чувствительная операция. Следи за:
Всегда проверяй access token. Не доверяй user ID из тела запроса. Раскодируй и проверь JWT. Вот как это делается в Logto.
Всегда валидируй guest ID. Удостоверься, что он есть в базе и не истёк. Если guest ID — это JWT, проверь подпись.
Требуй аутентификацию. Endpoint должен отклонять запросы без корректного access token.
Устанавливай TTL для гостевых сессий. Удаляй заброшенные сессии через 30 дней (или по своему усмотрению).
Гостевой режим с Logto реализуется по простому паттерну:
Гость (твоё приложение) → управление сессиями до регистрации
Auth (Logto) → регистрация и вход
Merge (твоё приложение) → привязка гостевых данных к пользователю
Этот паттерн работает с любым OIDC-провайдером, не только с Logto. Суть: аутентификация и отслеживание сессии — разные задачи. Пусть каждая система решает свою.