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

Вход через Яндекс, VK ID и Сбер ID

Бета-версия

Data API работает в бета-версии и открыт пока не всем. Как получить доступ, рассказано на странице «Что такое Data API».

Посетитель нажимает «Войти через Яндекс», подтверждает вход у провайдера и возвращается на сайт уже вошедшим. Работает так же, как в Supabase:

await db.auth.signInWithOAuth({
provider: "yandex", // или "vkid", "sber"
options: { redirectTo: "https://shop.example/account" },
});

Подключение​

Провайдера подключают один раз для каждой базы: в панели откройте базу, затем «Авторизация» → «Способы входа» → провайдер. Окно ведёт по трём шагам.

  1. Создайте приложение у провайдера.

    ПровайдерГдеЧто понадобится
    Яндексoauth.yandex.ru → «Создать приложение»Client ID и секрет
    VK IDid.vk.ru → «Создать приложение»только Client ID, секрета у VK ID нет
    Сбер IDdevelopers.sber.ru → Сбер ID → заявка партнёрадоговор партнёра, Client ID, секрет и сертификат
  2. Впишите у провайдера адрес возврата. Его показывает окно в панели, выглядит он так:

    https://data.layero.ru/<адрес-базы>/auth/v1/callback

    Это адрес Data API, а не вашего сайта: провайдер возвращает человека к нам, а мы — на ваш сайт.

  3. Скопируйте Client ID и секрет в панель и нажмите «Проверить вход». Проверка выполняет настоящий вход через провайдера и показывает, что он вернул.

Какие права отметить у провайдера​

Платформа запрашивает у провайдера только права, нужные для учётки. Отметьте у приложения те же права:

ПровайдерПрава
Яндексlogin:email (адрес почты), login:info (имя)
VK IDemail, phone
Сбер IDopenid, 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. По этому списку приложение может решить, показывать ли кнопку «Привязать Яндекс».