Единый аккаунт и способы входа
Кратко
Система единого аккаунта (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 хешированием |
google | OAuth 2.0 — кнопка «Войти через Google» | |
| Яндекс | yandex | OAuth 2.0 — кнопка «Войти через Яндекс» |
| Bitrix24 | bitrix24 | Автоматическая привязка при входе через Bitrix24 iframe |
| AmoCRM | amocrm | Запланировано (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-системе.
Связанные статьи
- Система приглашений — подключение новых пользователей.
- Управление компаниями-клиентами — организации и доступ.
- Настройка Bitrix24 — интеграция с Bitrix24.
- Мульти-тенантность — изоляция данных между тенантами.