Product system

🔑 Восстановление пароля пользователя

Позволяет зарегистрированному пользователю Gratheon восстановить доступ к аккаунту при забытом пароле без обращения в поддержку и без раскрытия информации о том, зарегистрирован ли указанный email.

🎯 Назначение

Позволяет зарегистрированному пользователю Gratheon восстановить доступ к аккаунту при забытом пароле без обращения в поддержку и без раскрытия информации о том, зарегистрирован ли указанный email.

🎭 Пользовательская история

  • Как пчеловод с аккаунтом Gratheon,
  • я хочу сбросить пароль с экрана входа,
  • чтобы безопасно вернуться к данным ульев, пасек и мониторинга при потере доступа.

🚀 Ключевые преимущества

  • Самостоятельное восстановление: запрос сброса прямо со страницы входа.
  • Подтверждение по email: на адрес аккаунта отправляется защищённая ссылка сброса.
  • Защита приватности: экран запроса показывает общее сообщение об успехе и не раскрывает, существует ли email.
  • Короткоживущие ссылки: ссылки сброса истекают через 1 час и работают только один раз.
  • Защита от злоупотреблений: запросы ограничены по частоте, чтобы снизить спам и атаки на учётные записи.
  • Понятные сообщения: для недействительных, просроченных или уже использованных ссылок показываются понятные подсказки.

🔧 Технический обзор

Восстановление пароля реализовано во frontend web-app и сервисе аутентификации user-cycle. Веб-приложение показывает ссылку «Forgot password?» на странице входа, форму запроса сброса и форму нового пароля, открываемую из письма. Backend генерирует криптографически стойкие токены сброса, хранит только их хеши, отправляет письмо, проверяет срок действия и одноразовость токена, а затем обновляет пароль пользователя.

📋 Критерии приёмки

  • Ссылка «Forgot password?» доступна на экране входа.
  • Пользователь может отправить email аккаунта для запроса ссылки сброса.
  • Страница запроса возвращает общее сообщение об успехе и для существующих, и для несуществующих email.
  • Система отправляет письмо со ссылкой сброса для зарегистрированных аккаунтов.
  • Ссылка открывает страницу восстановления пароля с токеном.
  • Пользователь может ввести и подтвердить новый пароль перед отправкой.
  • Пароль обновляется после отправки действительного токена.
  • Просроченные, недействительные или уже использованные токены отклоняются с понятным сообщением.
  • Ссылки сброса истекают через 1 час и одноразовые.
  • Запросы ограничены до 3 в день на пользователя/email/IP.
  • Активные сессии остаются действительными после сброса пароля.

🚫 Вне области задачи

  • Восстановление пароля для аккаунтов только с OAuth-входом через сторонние сервисы.
  • Сброс пароля через поддержку.
  • Принудительный выход из существующих сессий после сброса пароля.
  • Восстановление при многофакторной аутентификации.
  • Ручная проверка владения аккаунтом.

🏗️ Подход к реализации

  • Frontend: со страницы входа ссылка на /account/forgot-password; письма открывают /account/reset-password?token=....
  • Backend: user-cycle предоставляет GraphQL-мутации requestPasswordReset(email) и resetPassword(token, password).
  • Безопасность: токены случайные, хешируются перед хранением, одноразовые, срок действия 1 час.
  • Защита от злоупотреблений: ограничение частоты запросов по email, пользователю и IP.
  • UX: общее сообщение об успехе запроса, проверка совпадения паролей, понятная обратная связь при недействительной ссылке.

📊 Метрики успеха

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

🔗 Связанные функции

📚 Ресурсы и ссылки

💬 Заметки

Эта функция входит в базовый жизненный цикл аккаунта. Она упрощает восстановление доступа для пчеловодов, защищает приватность и снижает злоупотребления ссылками сброса.


Последнее обновление: 23 июня 2026
Следующий пересмотр: июль 2026

Product map

Move from software to automatic data collection