Segmenta поддерживает несколько способов аутентификации: классическую регистрацию по email/паролю, OAuth через внешние сервисы и двухфакторную аутентификацию (TOTP).

Регистрация

При регистрации пользователь указывает:
  • Имя пользователя (3–50 символов)
  • Email
  • Пароль (минимум 6 символов)
Система автоматически:
  1. Проверяет уникальность email и имени пользователя
  2. Генерирует аватар по умолчанию
  3. Назначает случайный скин и плащ из настроек (если заданы дефолтные)
  4. Хеширует пароль
  5. Отправляет код подтверждения email (если включена верификация)
Настройка обязательной верификации email управляется через параметр security.require_email_verification в настройках сайта (админ-панель).

Авторизация

Вход выполняется по email или имени пользователя + пароль. Система:
  1. Находит пользователя по логину (email или username)
  2. Проверяет, не заблокирован ли аккаунт
  3. Верифицирует пароль
  4. Проверяет 2FA (если включена)
  5. Проверяет необходимость верификации устройства
  6. Создаёт сессию и устанавливает cookie

Сессии

Сессии хранятся в базе данных (таблица sessions). Каждая сессия содержит:
  • Токен (два склеенных UUID)
  • ID пользователя
  • Время истечения
  • IP-адрес и User-Agent
Токен передаётся через httpOnly cookie (segmenta_session). Также поддерживается передача через заголовок Authorization: Bearer <token>. Срок жизни сессии задаётся параметром security.session_lifetime_days.

OAuth-подключения

Пользователи могут привязать к аккаунту внешние сервисы:
ПровайдерОписание
DiscordАвторизация и привязка Discord-аккаунта
VKАвторизация через ВКонтакте
TelegramПривязка Telegram-аккаунта
GoogleАвторизация через Google
YandexАвторизация через Яндекс
OAuth-настройки (Client ID, Client Secret, Redirect URI) задаются через админ-панель в разделе «Настройки → Подключения».

Двухфакторная аутентификация (2FA)

Segmenta поддерживает TOTP-аутентификацию (Google Authenticator, Authy и др.). Процесс включения:
  1. Пользователь запрашивает генерацию секрета
  2. Система возвращает секретный ключ и otpauth-ссылку (для QR-кода)
  3. Пользователь вводит код из приложения для подтверждения
  4. 2FA активируется, генерируются 8 резервных кодов
При входе с включённой 2FA:
  • Пользователь вводит 6-значный TOTP-код (totpToken)
  • Или использует одноразовый резервный код (backupCode)

Система верификации

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

Типы верификации

ТипОписание
softМягкая проверка — пользователь может продолжить, но рекомендуется подтвердить
freezeЖёсткая блокировка — аккаунт заморожен до прохождения верификации

Триггеры

Верификация может срабатывать при:
  • Входе с нового устройства
  • Входе из новой локации (IP/гео)
  • Подозрительной активности

Методы подтверждения

  • Подтверждение через email
  • Подтверждение через привязанный аккаунт Discord, VK, Yandex или Google
  • Ввод TOTP-кода
Набор доступных пользователю методов зависит от его привязанных аккаунтов и наличия включённой 2FA. Email доступен всегда. Подтверждение через Telegram пока не поддерживается.

Управление устройствами

Пользователи могут:
  • Просматривать список своих устройств
  • Отмечать устройства как «доверенные»
  • Удалять устройства
Администраторы могут:
  • Просматривать устройства любого пользователя
  • Обходить верификацию (bypassRequest)
  • Создавать ручную заморозку аккаунта

Сброс пароля

  1. Пользователь запрашивает сброс, указав email
  2. Система генерирует токен и отправляет ссылку на email
  3. Пользователь переходит по ссылке и задаёт новый пароль
  4. Токен одноразовый, действует 1 час

Подтверждение email

Для подтверждения email используется 6-значный код, отправляемый на почту. Код действует 30 минут. SMTP-настройки задаются через админ-панель в разделе «Настройки → Email».
Подробнее обо всех SMTP-параметрах — в разделе Настройки сайта.