3.3 KiB
3.3 KiB
добавлено
| добавлено |
|---|
| 2026-10-13 |
Спецификация. Тестовая страница встраивания CRM
Агент: crm-embed-test (создаёт админ). Код в Gitea gitea.tes.gd, хостинг на нашем сервере (Coolify).
Цель
Проверить задачу Олега в CRM «Передавати авторизацію CRM сайтам в iframe через postMessage» (mv5mmtt7kdk16z, проект Tvorymo shotam): страница, открытая в iframe из боковой панели CRM, узнаёт пользователя CRM.
Адреса
- Страница:
https://test-crm.tes.gd(HTTPS обязателен). - CRM:
https://shotam.tvorymo.comиhttps://units.tvorymo.com(с 2026-10-16;test.units.tvorymo.comбольше не используется — 403). Та же база Supabase. - Supabase:
https://yjxbkcqsquwbsyoonfkn.supabase.co.
Протокол (со стороны страницы)
- После загрузки:
window.parent.postMessage({ type: "crm:ready", version: 1 }, "*"). - Принимать
crm:auth{ access_token, expires_at, user: { id, email, name } }только от разрешённых origin CRM (envCRM_ORIGINS, решение владельца 2026-10-16). Origin отправителя показывать на странице. access_tokenотправить на сервер страницы; сервер проверяет его черезGET /auth/v1/user(заголовкиapikey: <publishable key>,Authorization: Bearer <token>) и сверяетexp,aud = "authenticated".- Имя и email брать из ответа Supabase, не из
userв сообщении (имя изuser_metadata; если пусто, показать «имя не задано в Supabase» и email). - Кнопка «Обновить токен»: отправляет
{ type: "crm:refresh" }, CRM отвечает новымcrm:auth; страница показывает, что токен сменился (времяexpires_at, без самого токена). - Выход (
crm:logout) не проверяем.
Требования
- Заголовок
Content-Security-Policy: frame-ancestors <origin CRM>(только разрешённые origin CRM), безX-Frame-Options. - Токен не логировать ни в браузере, ни на сервере. Сессию держать в памяти.
- Publishable-ключ Supabase агент получает от Ланы и записывает в свой CLAUDE.md (ключ публичный по дизайну).
- Без открытого токена в ответе страницы: показываем только имя, email, id, origin,
expires_at.
Готово, когда
- Страница в iframe CRM показывает имя и email пользователя из Supabase.
- После «Обновить токен» приходит новый токен и страница это показывает.
- Без iframe (открыта напрямую) страница пишет «жду авторизацию от CRM».
Ссылку в боковую панель CRM добавляет владелец.