Добавить в корзинуПозвонить
Найти в Дзене
Артем Аполлон

Объяснение ключевых параметров NextAuth.js

export const { handlers, signIn, signOut, auth } = NextAuth({ callbacks: { async session({token, session}){ if(token.sub && session.user){ session.user.id = token.sub } return session; }, async jwt({token}){ return token } }, adapter: PrismaAdapter(prisma), session: {strategy: "jwt"}, ...authConfig }) Представьте процесс входа в банк: Что это:
Объект с функциями (колбэками), которые вызываются на разных этапах аутентификации для изменения или дополнения данных. Что это:
Связывает NextAuth с вашей базой данных через Prisma ORM. Что это:
Определяет, где и как хранить сессии пользователей. Что это:
Вставляет (распаковывает) дополнительные настройки аутентификации из отдельного файла (например, провайдеры, секреты, опции).
Оглавление

export const { handlers, signIn, signOut, auth } = NextAuth({

callbacks: {

async session({token, session}){

if(token.sub && session.user){

session.user.id = token.sub

}

return session;

},

async jwt({token}){

return token

}

},

adapter: PrismaAdapter(prisma),

session: {strategy: "jwt"},

...authConfig

})

Краткая аналогия

Представьте процесс входа в банк:

  • adapter — база данных клиентов.
  • jwt — временная карта доступа (срок действия + данные).
  • session — сотрудник, который проверяет карту и решает, что вам показать.
  • callbacks — правила, по которым ваши данные подготавливаются для выдачи.

Подробный разбор конфигурации

1. callbacks

Что это:
Объект с функциями (колбэками), которые вызываются на разных этапах аутентификации для изменения или дополнения данных.

  • session({ token, session })
    Вызывается при создании/обновлении сессии.
    В примере: добавляет id пользователя из токена (token.sub) в объект сессии.
    Зачем: чтобы на клиенте был доступен идентификатор пользователя (session.user.id).
  • jwt({ token })
    Вызывается при создании или обновлении JWT-токена.
    В примере: возвращает токен без изменений (но здесь можно добавить свои поля, например, роль пользователя).
    Зачем: чтобы добавить в токен нужные данные, которые не хранятся в базе.

2. adapter: PrismaAdapter(prisma)

Что это:
Связывает NextAuth с вашей базой данных через Prisma ORM.

  • Что делает:
    Автоматически создаёт и обновляет записи пользователей, аккаунтов, токенов подтверждения и т.д.
    Позволяет не писать SQL-запросы вручную.

3. session: { strategy: "jwt" }

Что это:
Определяет, где и как хранить сессии пользователей.

  • jwt — сессии хранятся в виде зашифрованных JWT-токенов (обычно в cookie).
    Плюсы: не требует обращения к базе данных при каждом запросе, легко масштабируется.
  • Альтернатива: "database" — сессии хранятся в базе данных (подходит, если нужно централизованное управление сессиями).

4. ...authConfig

Что это:
Вставляет (распаковывает) дополнительные настройки аутентификации из отдельного файла (например, провайдеры, секреты, опции).

Как всё работает вместе

  1. Пользователь входит через провайдера (OAuth или логин/пароль).
  2. NextAuth:
    Генерирует JWT (через jwt-колбэк).
    Сохраняет/обновляет данные пользователя в базе через PrismaAdapter.
  3. При каждом запросе:
    Расшифровывает JWT из cookie.
    Формирует объект сессии (session-колбэк).
    Передаёт данные в компоненты через auth().

Когда менять эту конфигурацию?

  • Нужно добавить кастомные поля в JWT → меняйте jwt()-колбэк.
  • Хотите хранить сессии в базе данных → меняйте strategy на "database".
  • Используете другую базу данных → замените PrismaAdapter на подходящий адаптер.

Итог для вашего примера

  • Сессии хранятся безопасно в JWT.
  • Пользовательские данные синхронизируются с Prisma.
  • В сессию добавлен id пользователя для удобного доступа на клиенте.