Skip to main content
Полный перечень полей — в глоссарии.

Что делает этот процесс

Сброс пароля позволяет пользователю, забывшему пароль, задать новый, подтвердив, что он владеет своим адресом электронной почты. Поскольку у пользователя один глобальный пароль (не зависящий от компании), после успешного сброса новый пароль действует во всех компаниях, где состоит этот человек. Процесс разбит на три последовательных шага-запроса:
  1. Инициация сброса пароля — пользователь вводит email, система отправляет на него одноразовый код.
  2. Проверка кода сброса — пользователь вводит полученный код; при совпадении система выдаёт временный токен сброса.
  3. Подтверждение нового пароля — пользователь присылает токен и новый пароль; система устанавливает пароль.
Каждый шаг — отдельный HTTP-запрос, и переход к следующему возможен только с результатом предыдущего (кодом, затем токеном).
Одноразовые коды выдаёт и проверяет единый Сервис одноразовых кодов (OTP). Для сброса пароля код привязан к конкретному адресу электронной почты — для каждого адреса своя отдельная область хранения кода.

Шаг 1. Инициация сброса пароля

На вход принимается только Email (обязательное поле, проверяется формат адреса). Дальнейшая логика:
  • Система проверяет, существует ли пользователь с таким адресом.
  • Если пользователь найден — Сервис одноразовых кодов выпускает новый код, привязанный к этому адресу, после чего письмо с кодом ставится в очередь фоновой отправки (тема письма — «Сброс пароля Yume!», отправляется и HTML-, и текстовая версия шаблона).
  • Если пользователь не найден — не происходит ничего: код не выпускается, письмо не отправляется.
В обоих случаях ответ клиенту одинаковый — «Код отправлен» с успешным статусом.
Одинаковый ответ для существующего и несуществующего адреса сделан намеренно — чтобы по ответу нельзя было узнать, зарегистрирован ли адрес в системе (защита от перебора адресов).

Пауза между запросами кода

При выпуске кода Сервис одноразовых кодов соблюдает Паузу между запросами — новый код нельзя выпустить чаще, чем раз в 60 секунд. Если пользователь запрашивает код повторно слишком рано, срабатывает Ошибка паузы, и шаг инициации отвечает статусом «слишком много запросов» (429) с сообщением «Подождите минуту перед повторным запросом кода».

Ограничение частоты запросов

У шага инициации собственный лимит частоты: не более 5 запросов в минуту. Он работает независимо от паузы между запросами кода и ограничивает частоту обращений к самому шагу.

Шаг 2. Проверка кода сброса

На вход принимаются Email и Код OTP (ровно 6 символов). Логика:
  • Система обращается к Сервису одноразовых кодов и сверяет присланный код с сохранённым для этого адреса.
  • При неверном или отсутствующем коде возвращается ошибка «Неверный код».
  • При верном коде генерируется Токен сброса — случайный уникальный идентификатор — и сохраняется в кэше (привязанным к этому адресу) на 300 секунд (5 минут). Токен возвращается клиенту.
При успешной проверке код «сжигается» — Сервис одноразовых кодов удаляет его сразу после совпадения. Повторно использовать тот же код нельзя; для новой попытки понадобится запросить код заново.

Что проверяет сам сервис при сверке кода

При сверке Сервис одноразовых кодов выполняет несколько проверок в следующем порядке:
Сравнение кода выполняется устойчивым к таймингу способом, а сам код — 6 случайных цифр. После пятой неверной попытки код блокируется: следующая проверка (даже с верным кодом) не пройдёт и код будет удалён — потребуется запросить новый.

Ограничение частоты запросов

У шага проверки свой лимит частоты: не более 10 запросов в минуту.

Шаг 3. Подтверждение нового пароля

На вход принимаются Токен сброса, Email и Новый пароль. Новый пароль проверяется по стандартным правилам (минимальная длина 8 символов плюс встроенные проверки — на распространённость, схожесть с данными пользователя и т.п.). Логика:
  • Система читает из кэша токен, сохранённый на шаге проверки для этого адреса.
  • Если токена нет или он не совпадает с присланным — возвращается ошибка «Ссылка для сброса пароля недействительна или устарела».
  • Если токен совпал — ищется пользователь по адресу. Если пользователь не найден, возвращается ошибка. Иначе новому паролю присваивается значение (с корректным хешированием), пользователь сохраняется.
  • После успешной смены токен сброса удаляется из кэша, ответ — «Пароль успешно изменён».
Токен сброса живёт 5 минут независимо от одноразового кода. Даже если пользователь помнит код, но не уложился в 5 минут после его проверки, шаг подтверждения ответит, что ссылка устарела — придётся начать заново с проверки кода.

Итоговая схема таймингов и лимитов

Одноразовые коды и токены сброса хранятся в кэше, разделённом по компаниям. Это значит, что все три шага должны выполняться в контексте одной и той же компании — иначе выпущенный код или токен не будет найден на следующем шаге.

Связанные страницы

Глоссарий: Сброс пароля через OTP

Полный перечень полей и понятий процесса сброса пароля.

Пользователи и доступ

Обзорная страница раздела: аккаунт, участие в компании, роли и права.

Проблемы и логические ошибки

Сводка известных проблем и логических ошибок всего модуля.

Аккаунт и участие в компании

Как аккаунт связан с телефоном, как устроено участие в компаниях и откуда берутся роли.

Вход в систему

По каким данным можно войти — телефон, логин или адрес почты — и откуда берутся права.

Сессии и срок действия входа

Сколько живёт вход, как он продлевается и когда потребуется войти заново.

Как система определяет вашу компанию

Определение компании по адресу сайта или по аккаунту и что делать, если компании ещё нет.

Профиль и управление сотрудниками

Редактирование своего профиля, добавление сотрудников и назначение им ролей.

Вход через Google

Вход по аккаунту Google и связывание его с существующим профилем.

Уровни лояльности и карты

Уровни лояльности клиентов и оформление их карт для Apple и Google Wallet.