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

Кратко

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

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

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

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

Где найти

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

Как работает

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

ТаблицаНазначениеКлючевые поля
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Привязка при импорте пользователей amoCRM в команду
TelegramtelegramПривязка Telegram-аккаунта пользователя

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

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

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

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

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

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

OAuth-вход (Google, Yandex)

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

Вход через Bitrix24

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

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

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

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

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

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

Bitrix24 и amoCRM — примеры таких CRM-систем; какие ещё бывают и чем отличаются, смотрите в статье CRM-системы: какие бывают и примеры.

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

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

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

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

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

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

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

Да, если у аккаунта больше одного способа входа: в профиле, в блоке «Способы входа», у каждого способа есть кнопка удаления. Последний способ входа удалить нельзя.

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

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

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

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

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

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

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