Перейти к основному содержимому

Вход пользователей

Вход пользователей совместим с GoTrue, поэтому работает supabase-js:

await db.auth.signUp({ email, password });
await db.auth.signInWithPassword({ email, password });
const { data: { user } } = await db.auth.getUser();

Поверхность: /auth/v1/{token,signup,recover,verify,resend,authorize,callback}, GET /auth/v1/user, PUT /auth/v1/user, POST /auth/v1/logout. Есть вход по ссылке из письма (magic link), PKCE и внешние провайдеры — включаются в панели у базы.

Роль вошедшего

Вошедший пользователь работает под ролью authenticated, аноним — под anon. Роль вошедшего наследует анонимную: вход только добавляет доступ.

В политиках доступны auth.uid() и auth.role() — те же имена, что у Supabase, поэтому перенесённые политики работают без правки:

CREATE POLICY entries_own ON public.entries
FOR SELECT TO PUBLIC
USING (owner_id = auth.uid());

🚨 Политика TO authenticated USING (true), перенесённая с Supabase, значит «всем, кто вошёл». Проверьте, что вы имели в виду именно это: пока у нас не было отдельной роли вошедшего, такая политика открывала таблицу любому, у кого есть публичный ключ.

Вход из панели Layero: без второго пароля

Если приложение делаете вы сами, а его пользователи — ваша команда в Layero, отдельный пароль заводить не нужно. Панель умеет обменять свою сессию на сессию базы:

POST /organizations/<организация>/databases/<id>/api/app-session

Ответ — пара токенов, подписанных секретом этой базы, и адрес шлюза:

{
"url": "https://data.layero.ru/moya-baza",
"access_token": "eyJ…",
"refresh_token": "…",
"expires_in": 3600,
"user": { "id": "…", "email": "…" }
}

Токен кладётся в authorization: Bearer … рядом с публичным ключом — дальше всё как у обычного входа: роль authenticated, auth.uid(), политики.

Прав это не расширяет: доступ по-прежнему решают гранты и RLS, а владелец организации не получает «видно всё». Пользователь в auth.users заводится или находится тем же путём, что и при входе через внешнего провайдера. Повторный обмен находит того же человека, а не создаёт второго.

Секрет подписи — на базу

Токены каждой базы подписаны своим секретом. Подпись проверяет та база, к которой обращаются, поэтому подменить имя базы в адресе недостаточно: токен одного приложения у другого не пройдёт.