Что делает этот процесс
Сброс пароля позволяет пользователю, забывшему пароль, задать новый, подтвердив, что он владеет своим адресом электронной почты. Поскольку у пользователя один глобальный пароль (не зависящий от компании), после успешного сброса новый пароль действует во всех компаниях, где состоит этот человек. Процесс разбит на три последовательных шага-запроса:- Инициация сброса пароля — пользователь вводит email, система отправляет на него одноразовый код.
- Проверка кода сброса — пользователь вводит полученный код; при совпадении система выдаёт временный токен сброса.
- Подтверждение нового пароля — пользователь присылает токен и новый пароль; система устанавливает пароль.
Одноразовые коды выдаёт и проверяет единый Сервис одноразовых кодов (OTP). Для сброса пароля код привязан к конкретному адресу электронной почты — для каждого адреса своя отдельная область хранения кода.
Шаг 1. Инициация сброса пароля
На вход принимается только Email (обязательное поле, проверяется формат адреса). Дальнейшая логика:- Система проверяет, существует ли пользователь с таким адресом.
- Если пользователь найден — Сервис одноразовых кодов выпускает новый код, привязанный к этому адресу, после чего письмо с кодом ставится в очередь фоновой отправки (тема письма — «Сброс пароля Yume!», отправляется и HTML-, и текстовая версия шаблона).
- Если пользователь не найден — не происходит ничего: код не выпускается, письмо не отправляется.
Одинаковый ответ для существующего и несуществующего адреса сделан намеренно — чтобы по ответу нельзя было узнать, зарегистрирован ли адрес в системе (защита от перебора адресов).
Пауза между запросами кода
При выпуске кода Сервис одноразовых кодов соблюдает Паузу между запросами — новый код нельзя выпустить чаще, чем раз в 60 секунд. Если пользователь запрашивает код повторно слишком рано, срабатывает Ошибка паузы, и шаг инициации отвечает статусом «слишком много запросов» (429) с сообщением «Подождите минуту перед повторным запросом кода».Ограничение частоты запросов
У шага инициации собственный лимит частоты: не более 5 запросов в минуту. Он работает независимо от паузы между запросами кода и ограничивает частоту обращений к самому шагу.Шаг 2. Проверка кода сброса
На вход принимаются Email и Код OTP (ровно 6 символов). Логика:- Система обращается к Сервису одноразовых кодов и сверяет присланный код с сохранённым для этого адреса.
- При неверном или отсутствующем коде возвращается ошибка «Неверный код».
- При верном коде генерируется Токен сброса — случайный уникальный идентификатор — и сохраняется в кэше (привязанным к этому адресу) на 300 секунд (5 минут). Токен возвращается клиенту.
Что проверяет сам сервис при сверке кода
При сверке Сервис одноразовых кодов выполняет несколько проверок в следующем порядке:Сравнение кода выполняется устойчивым к таймингу способом, а сам код — 6 случайных цифр. После пятой неверной попытки код блокируется: следующая проверка (даже с верным кодом) не пройдёт и код будет удалён — потребуется запросить новый.
Ограничение частоты запросов
У шага проверки свой лимит частоты: не более 10 запросов в минуту.Шаг 3. Подтверждение нового пароля
На вход принимаются Токен сброса, Email и Новый пароль. Новый пароль проверяется по стандартным правилам (минимальная длина 8 символов плюс встроенные проверки — на распространённость, схожесть с данными пользователя и т.п.). Логика:- Система читает из кэша токен, сохранённый на шаге проверки для этого адреса.
- Если токена нет или он не совпадает с присланным — возвращается ошибка «Ссылка для сброса пароля недействительна или устарела».
- Если токен совпал — ищется пользователь по адресу. Если пользователь не найден, возвращается ошибка. Иначе новому паролю присваивается значение (с корректным хешированием), пользователь сохраняется.
- После успешной смены токен сброса удаляется из кэша, ответ — «Пароль успешно изменён».
Итоговая схема таймингов и лимитов
Одноразовые коды и токены сброса хранятся в кэше, разделённом по компаниям. Это значит, что все три шага должны выполняться в контексте одной и той же компании — иначе выпущенный код или токен не будет найден на следующем шаге.
Связанные страницы
Глоссарий: Сброс пароля через OTP
Полный перечень полей и понятий процесса сброса пароля.
Пользователи и доступ
Обзорная страница раздела: аккаунт, участие в компании, роли и права.
Проблемы и логические ошибки
Сводка известных проблем и логических ошибок всего модуля.
Аккаунт и участие в компании
Как аккаунт связан с телефоном, как устроено участие в компаниях и откуда берутся роли.
Вход в систему
По каким данным можно войти — телефон, логин или адрес почты — и откуда берутся права.
Сессии и срок действия входа
Сколько живёт вход, как он продлевается и когда потребуется войти заново.
Как система определяет вашу компанию
Определение компании по адресу сайта или по аккаунту и что делать, если компании ещё нет.
Профиль и управление сотрудниками
Редактирование своего профиля, добавление сотрудников и назначение им ролей.
Вход через Google
Вход по аккаунту Google и связывание его с существующим профилем.
Уровни лояльности и карты
Уровни лояльности клиентов и оформление их карт для Apple и Google Wallet.