Логотип Аурабаза
аурабазадокументы
документы›Путеводители›Authenticate users (SDK)

Аутентификация пользователей с помощью JavaScript SDK

Ежедневные потоки aura.auth с поведением каждого вызова, наблюдаемым в работающем стеке.

11 мин читать·Уровень средний·Пересмотрено 12 окт. 2026 г.
Этот текст на английском языке был создан автоматически на основе французского оригинала и еще не проверялся.
Английский источник изменился после этого перевода. Некоторая информация может быть устаревшей.
Эта страница была переведена автоматически. Английская версия является авторитетной.
#
Основы

1. Зарегистрируйтесь и войдите в систему

auth.tstypescript
import { createClient, isMfaChallenge } from '@aurabase/aurabase-js'

const aura = createClient(process.env.AURA_URL!, process.env.AURA_ANON_KEY!)

// Завести аккаунт
const { data, error } = await aura.auth.signUp({ email: 'ada@example.com', password: 'a-long-passphrase' })

// Войти
const login = await aura.auth.signInWithPassword({ email: 'ada@example.com', password: 'a-long-passphrase' })
if (login.error) return showError(login.error.message)
if (login.data && isMfaChallenge(login.data)) return askForTotpCode(login.data.mfa_token)
// в противном случае сеанс уже существует

Оба вызова возвращают одну и ту же форму. В случае успеха data содержит access_token, refresh_token, expires_in (900 секунд) и user, и клиент сохраняет сеанс для вас. Следующий запрос уже аутентифицирован.

Действия signUp зависят от настроек вашего проекта. В нашем тестовом проекте пользователь сразу авторизовался с помощью email_verified: false, и проект может сначала потребовать подтверждения.

Сбои, с которыми вам следует справиться, как замечено:

ВызовОшибка
Неправильный пароль401, code: 'invalid_credentials', «Недействительные идентификаторы»
Недействительная или просроченная ссылка или код401, code: 'invalid_otp'
Анонимный вход, когда проект запрещает его403, FORBIDDEN

signInAnonymously() создает пользователя без адреса электронной почты, но в новом проекте отключен и возвращает 403, пока вы не включите его в настройках аутентификации проекта.

#
Состояние

2. Сессия и ее мероприятия

session.tstypescript
const { data: { session } } = await aura.auth.getSession() // нет сетевого вызова: читает магазин
const { data: user } = await aura.auth.getUser()           // спрашивает сервер

const { data: { subscription } } = aura.auth.onAuthStateChange(({ event, user }) => {
  // событие: «INITIAL_SESSION» | 'SIGNED_IN' | 'TOKEN_REFRESHED' | 'USER_UPDATED' | 'SIGNED_OUT' | 'MFA_CHALLENGE'
})
subscription.unsubscribe()

Реальный запуск привел к следующей последовательности: INITIAL_SESSION, SIGNED_IN (регистрация), SIGNED_IN (вход), USER_UPDATED, TOKEN_REFRESHED, SIGNED_OUT.

  • Клиент обновляет токен доступа до истечения срока его действия. Вызовите aura.auth.refreshSession(), чтобы принудительно это сделать.
  • getSession() является локальным и быстрым: используйте его для рендеринга. Используйте getUser(), когда вам нужно текущее представление пользователя на сервере.
  • Чтобы передать сеанс клиенту из другого места (файла cookie, сервера), используйте setSession(accessToken, refreshToken). Недействительная пара отклоняется, и предыдущий сеанс сохраняется.
  • Для рендеринга на стороне сервера см. Next.js App Router и SSR.
#
Счет

3. Профиль и пароль

profile.tstypescript
// Метаданные: передайте их в `data`
await aura.auth.updateUser({ data: { theme: 'dark', plan: 'free' } })
// → user.user_metadata — это { plan: 'free', theme: 'dark' }, и getUser() возвращает то же самое

// Смените электронную почту: адрес пока НЕ ​​меняется
await aura.auth.updateUser({ email: 'new@example.com' })
// Ссылка для подтверждения ведет на новый адрес. До тех пор, пока он не будет использован, user.email сохраняет старое значение.
// Подтвердите: aura.auth.verifyOtp({ type: 'email_change', token })

// Изменить пароль
await aura.auth.updatePassword('a-new-long-passphrase', 'a-long-passphrase')
Изменение пароля приводит к выходу из системы

Сервер отменяет все сеансы при изменении пароля. updatePassword очищает локальный сеанс и выдает SIGNED_OUT: войдите снова с новым паролем. В реальном запуске getSession() был пуст сразу после вызова, и вход с новым паролем сработал.

Забыли пароль: aura.auth.resetPasswordForEmail({ email }) отправляет электронное письмо для сброса пароля. Затем пользователь завершает его с помощью verifyOtp({ type: 'recovery', token, password }).

Удалить учетную запись: aura.auth.deleteUser(password) запрашивает текущий пароль, удаляет учетную запись и очищает локальный сеанс.

#
Альтернативы

4. Ссылки, коды и OAuth

passwordless.tstypescript
// Волшебная ссылка по электронной почте
await aura.auth.signInWithMagicLink({ email })
// → { message: «Если этот адрес электронной почты существует, un залог связи с вашим посланником» }
// Ответ один и тот же независимо от того, существует учетная запись или нет: утечки учетных записей не происходит.

// Одноразовые коды
await aura.auth.signInWithEmailOtp(email)
await aura.auth.signInWithSmsOtp(phone)
await aura.auth.verifyOtp({ type: 'email', email, code })     // также: «смс», «магическая ссылка», «регистрация», «восстановление», «email_change»

// OAuth: поставщик — это ПЕРВЫЙ аргумент, строка
const { data } = await aura.auth.signInWithOAuth('google', { redirectTo: 'https://app.example.com/callback' })
window.location.href = data!.url

signInWithOAuth возвращает URL-адрес для открытия; он не перемещается сам по себе. Поставщик должен быть включен и настроен в проекте, иначе стартовый URL будет отвечать PROVIDER_NOT_CONFIGURED.

Не форма supabase-js

signInWithOAuth({ provider: 'google' }) возвращает ошибку invalid_provider. Передайте поставщика в качестве первого аргумента.

После обратного перенаправления клиент самостоятельно считывает сеанс по URL-адресу (detectSessionInUrl). Для потока PKCE передайте flowType: 'pkce', сохраните постоянное хранилище по умолчанию, и клиент заменит вам код.

Свяжите второго провайдера с зарегистрированной учетной записью с помощью linkIdentity(provider), перечислите его с помощью listIdentities() и удалите одного с помощью unlinkIdentity(identityId).

#
Второй фактор

5. Многофакторная аутентификация

mfa.tstypescript
// 1. Зарегистрируйтесь: покажите QR-код, созданный на основе otpauth_url.
const { data: enrol } = await aura.auth.mfaEnroll()   // → { секрет, otpauth_url }
// 2. Подтвердите первый код из приложения аутентификации: вы получите коды восстановления.
const { data: confirm } = await aura.auth.mfaVerifySetup(codeFromApp) // → { коды_восстановления: [...] }

// 3. С этого момента при входе в систему вместо сеанса возвращается вызов.
const login = await aura.auth.signInWithPassword({ email, password })
if (login.data && isMfaChallenge(login.data)) {
  await aura.auth.mfaVerify({ mfa_token: login.data.mfa_token, code: codeFromApp })
}

mfaUnenroll(password) отключает его, а regenerateRecoveryCodes(code) выдает новые коды восстановления. При вызове генерируется MFA_CHALLENGE, и сеанс не сохраняется до тех пор, пока mfaVerify не завершится успешно.

#
Устройства

6. Устройства и сеансы

devices.tstypescript
const { data } = await aura.auth.listSessions()
// [{ id, device_info, ip_address, созданный_at, expires_at, Last_used_at, is_current }, …]

await aura.auth.revokeSession(sessionId)   // выйти из одного устройства
await aura.auth.revokeAllSessions()        // выхожу везде, включая этот
await aura.auth.signOut()                  // только это устройство

is_current отмечает сеанс, который вы используете. signOut отзывает токен обновления на сервере, если он есть, очищает локальный сеанс и выдает SIGNED_OUT.

#
Сервер

7. Администрирование пользователей

Для администрирования пользователей необходим ключ service_role. Он доступен только на сервере: чтение aura.authAdmin в браузере выдаёт ошибку.

server/users.tstypescript
import { createAdminClient } from '@aurabase/aurabase-js'

const admin = createAdminClient(process.env.AURA_URL!, process.env.AURA_SERVICE_ROLE_KEY!)

const { data: users } = await admin.authAdmin.listUsers({ limit: 20, search: 'ada' })
const { data: created } = await admin.authAdmin.createUser({ email: 'bob@example.com', password: 'a-long-passphrase', email_verified: true })
await admin.authAdmin.banUser(created!.id)
await admin.authAdmin.unbanUser(created!.id)
const { data: link } = await admin.authAdmin.generateLink(created!.id, 'magic') // → { ссылка, токен }
await admin.authAdmin.deleteUser(created!.id)

const { data: stats } = await admin.authAdmin.getUserStats() // → { всего, проверено, забанено, mfa_enabled, new_7d }

generateLink принимает 'magic', 'recovery' или 'invite'. Клиент администратора также управляет настройками аутентификации проекта (getSettings, updateSettings), шаблонами электронной почты, сеансами каждого пользователя и журналом аудита (getAuditLog). Каждый метод указан в ссылке на аутентификацию .

Последнее обновление · 12 окт. 2026 г.