Вход через Яндекс, VK ID и Сбер ID
Data API работает в бета-версии и открыт пока не всем. Как получить доступ, рассказано на странице «Что такое Data API».
Посетитель нажимает «Войти через Яндекс», подтверждает вход у провайдера и возвращается на сайт уже вошедшим. Работает так же, как в Supabase:
await db.auth.signInWithOAuth({
provider: "yandex", // или "vkid", "sber"
options: { redirectTo: "https://shop.example/account" },
});
Подключение
Провайдера подключают один раз для каждой базы: в панели откройте базу, затем «Авторизация» → «Способы входа» → провайдер. Окно ведёт по трём шагам.
-
Создайте приложение у провайдера.
Провайдер Где Что понадобится Яндекс oauth.yandex.ru → «Создать приложение» Client ID и секрет VK ID id.vk.ru → «Создать приложение» только Client ID, секрета у VK ID нет Сбер ID developers.sber.ru → Сбер ID → заявка партнёра договор партнёра, Client ID, секрет и сертификат -
Впишите у провайдера адрес возврата. Его показывает окно в панели, выглядит он так:
https://data.layero.ru/<адрес-базы>/auth/v1/callbackЭто адрес Data API, а не вашего сайта: провайдер возвращает человека к нам, а мы — на ваш сайт.
-
Скопируйте Client ID и секрет в панель и нажмите «Проверить вход». Проверка выполняет настоящий вход через провайдера и показывает, что он вернул.
Какие права отметить у провайдера
Платформа запрашивает у провайдера только права, нужные для учётки. Отметьте у приложения те же права:
| Провайдер | Права |
|---|---|
| Яндекс | login:email (адрес почты), login:info (имя) |
| VK ID | email, phone |
| Сбер ID | openid, name, email |
Куда можно вернуть человека
redirectTo должен совпадать с одним из разрешённых адресов сайта. Список — в
том же окне панели. В нём уже стоят адреса подключённых проектов; можно
добавить и свои, например http://localhost:5173 для разработки. Чужой адрес
отклоняется, иначе ссылка входа унесла бы сессию на сторонний сайт. Без
redirectTo посетитель вернётся на адрес подключённого проекта.
Кнопка на сайте
Показывайте кнопку только для подключённых провайдеров. Список отдаёт
GET /auth/v1/settings:
const res = await fetch(`${DATA_URL}/auth/v1/settings`, {
headers: { apikey: DATA_KEY },
});
const { external } = await res.json();
// external = { yandex: true, vkid: false, sber: false }
if (external.yandex) showYandexButton();
true означает, что ключи сохранены и вход включён.
Если вход не удался
Если redirectTo разрешён, посетителя возвращают на ваш сайт, а причину
передают в параметрах адреса: error, error_code и error_description.
supabase-js разбирает их сам. Чаще всего встречаются эти коды:
| Код | Что случилось |
|---|---|
provider_not_configured | провайдер не подключён у базы |
provider_disabled | провайдер выключен в панели |
access_denied | человек отменил вход у провайдера |
Если redirectTo не передан, платформа отвечает JSON с тем же кодом и на сайт
не перенаправляет. На чужой адрес — тоже JSON, с кодом redirect_not_allowed.
Что происходит с учёткой
- Первый вход заводит пользователя. В
user.identitiesпоявляется запись провайдера (provider: "yandex"), имя и аватар приходят вuser_metadata. - Повторный вход через того же провайдера находит ту же учётку.
- Почта совпала с существующей учёткой. Яндекс и Сбер ID подтверждают
адрес, поэтому вход привязывается к этой учётке, и у неё появляется вторая
запись в
user.identities. VK ID адрес не подтверждает, поэтому такой вход отклоняется («Этот адрес уже занят другим способом входа»): иначе в чужую учётку можно было бы войти, просто вписав её адрес в профиль VK. - Почта другая — это другая учётка. Учётки платформа не объединяет.
У пользователя, который вошёл по почте (паролем, ссылкой или кодом из письма)
или заведён в панели, в user.identities лежит запись email, как в
Supabase. По этому списку приложение может решить, показывать ли кнопку
«Привязать Яндекс».