Вход пользователей
Вход пользователей совместим с 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 заводится или
находится тем же путём, что и при входе через внешнего провайдера. Повторный
обмен находит того же человека, а не создаёт второго.
Секрет подписи — на базу
Токены каждой базы подписаны своим секретом. Подпись проверяет та база, к которой обращаются, поэтому подменить имя базы в адресе недостаточно: токен одного приложения у другого не пройдёт.