Единый аккаунт и способы входа

Кратко

Система единого аккаунта (Unified Identity) позволяет каждому пользователю иметь один профиль с несколькими способами входа. Аккаунт хранится в таблице users, способы авторизации — в user_auth_methods, а членство в тенантах — в tenant_members. Пользователь может входить через email+пароль, Google OAuth, Yandex OAuth, привязку Bitrix24, или беспарольный код через WhatsApp/Telegram.

Кто имеет доступ

РольВход в системуПривязка способов входаУправление чужими аккаунтами
АдминистраторДаДа (свой аккаунт)Да (операторы, участники)
РуководительДаДа (свой аккаунт)Да (операторы)
ОператорДаДа (свой аккаунт)Нет
Сотрудник клиентаДаДа (свой аккаунт)Нет

Где найти

  • Вход: страница tenant.html (standalone-режим без CRM) или Bitrix24 iframe (автоматический вход).
  • Управление способами входа: в будущих версиях — профиль пользователя.
  • Управление участниками: Профиль компании → вкладка «Команда» (#profile/team).

Как работает

Архитектура: три таблицы

ТаблицаНазначениеКлючевые поля
usersЕдиный профиль пользователяid, email, phone, name, avatar_url, password_hash
user_auth_methodsСпособы входа (многие-к-одному)user_id, provider, provider_id, provider_meta
tenant_membersЧленство в тенантахuser_id, tenant_id, role (owner/admin/supervisor/operator)

Один пользователь может иметь несколько способов входа и состоять в нескольких тенантах одновременно.

Поддерживаемые способы входа

ПровайдерproviderКак работает
Email + парольemailКлассическая регистрация с Argon2ID хешированием
GooglegoogleOAuth 2.0 — кнопка «Войти через Google»
ЯндексyandexOAuth 2.0 — кнопка «Войти через Яндекс»
Bitrix24bitrix24Автоматическая привязка при входе через Bitrix24 iframe
AmoCRMamocrmЗапланировано (F133)

Процесс входа через email+пароль

  • Пользователь вводит email или телефон на странице логина.
  • Система определяет, есть ли аккаунт (find_user_by_login).
  • Если аккаунт найден — запрашивается пароль или беспарольный код.
  • При успешной проверке генерируется HMAC-токен сессии.
  • Токен сохраняется в localStorage и передаётся в каждом запросе через заголовок X-Tenant-Token.

Беспарольный вход через код

Если у пользователя привязан телефон, система может отправить одноразовый код:

  • Код отправляется через WhatsApp (приоритетный канал).
  • Если WhatsApp недоступен — fallback на Telegram.
  • Если оба недоступны — fallback на email.
  • Пользователь вводит код, система проверяет и создаёт сессию.

Код действует ограниченное время и может быть использован только один раз.

OAuth-вход (Google, Yandex)

  • Пользователь нажимает кнопку OAuth-провайдера.
  • Фронтенд запрашивает URL авторизации (oauth_auth_url).
  • Перенаправление на страницу провайдера.
  • После подтверждения — callback на tenant.php?action=oauth_callback.
  • Система извлекает email и профиль из токена провайдера.
  • Если пользователь существует — привязка способа входа и авторизация.
  • Если новый — переход на форму завершения регистрации (имя, телефон, компания).

Вход через Bitrix24

При открытии приложения в Bitrix24 iframe авторизация происходит автоматически:

  • auth.php получает данные B24 OAuth (domain, user_id, access_token).
  • Система ищет user_auth_methods с provider=bitrix24 и provider_id=domain:user_id.
  • Если найден — авторизация. Если нет — автоматическое создание пользователя и привязки.
  • Роль определяется по таблице tenant_members (с fallback на support_operators).

Привязка нескольких способов входа

Один аккаунт может иметь привязанные одновременно:

  • Email+пароль для прямого входа.
  • Google OAuth для быстрого входа.
  • Yandex OAuth как альтернативу.
  • Bitrix24 для работы из CRM.

Дедупликация: при OAuth-входе система сверяет email с существующими аккаунтами. Если email совпадает — провайдер привязывается к существующему аккаунту, а не создаёт дубликат.

Роли в тенанте

РольУровеньОписание
ownerВысшийВладелец тенанта (нормализуется в admin для проверок доступа)
adminВысокийПолный доступ к настройкам
supervisorСреднийУправление командой, аналитика
operatorБазовыйРабота с заявками

Частые вопросы

Что произойдёт, если войти через Google с тем же email, что и при регистрации?

Система найдёт существующий аккаунт по email и привяжет Google OAuth как дополнительный способ входа. Дублирования не произойдёт.

Можно ли отвязать способ входа?

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

Почему после входа через Bitrix24 отображается ошибка 403?

Проверьте, что в tenant_members есть запись с корректной ролью для данного пользователя и тенанта. Роль owner нормализуется в admin — это нормальное поведение.

Работает ли вход без CRM?

Да. Страница tenant.html предоставляет standalone-вход через email, Google или Yandex без привязки к CRM-системе.

Связанные статьи

Нужна поддержка, которая так и работает?

TehProf Support собирает обращения из WhatsApp, Telegram, почты и виджета в одну очередь, считает сроки по SLA и показывает, где служба проседает.