Найти в Дзене
Артем Аполлон

Prisma Adapter

@auth/prisma-adapter — это официальный
адаптер от команды Auth.js (NextAuth.js), который позволяет
интегрировать аутентификацию с базой данных через Prisma ORM. Вот ключевые аспекты его работы: Пример подключения: ts: import { PrismaAdapter } from "@auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export const authOptions = {
adapter: PrismaAdapter(prisma),
// ...другие настройки
}; Операция Auth.jsДействие адаптераsignIn()Создаёт/обновляет User и AccountgetSession()Ищет Session в БДupdateUser()Обновляет User через PrismacreateVerificationTokenСохраняет токен в VerificationToken Адаптер требует строгой структуры моделей в schema.prisma: text: model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
accounts Account[]
sessions Session[]
}
model Account {
id String @id @default(cuid()
Оглавление

@auth/prisma-adapter — это официальный
адаптер от команды Auth.js (NextAuth.js), который позволяет
интегрировать аутентификацию с базой данных через
Prisma ORM. Вот ключевые аспекты его работы:

1. Назначение

  • Мост между Auth.js и Prisma: Преобразует вызовы Auth.js в запросы к вашей базе данных через Prisma Client.
  • Автоматизация рутинных операций: Управляет хранением:
    Пользователей (User)
    Аккаунтов (Account)
    Сессий (Session)
    Верификационных токенов (VerificationToken)

2. Как работает

Пример подключения:

ts:

import { PrismaAdapter } from "@auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export const authOptions = {
adapter: PrismaAdapter(prisma),
// ...другие настройки
};

3. Что делает адаптер

Операция Auth.jsДействие адаптераsignIn()Создаёт/обновляет User и AccountgetSession()Ищет Session в БДupdateUser()Обновляет User через PrismacreateVerificationTokenСохраняет токен в VerificationToken

4. Требования к схеме Prisma

Адаптер требует строгой структуры моделей в schema.prisma:

text:

model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
accounts Account[]
sessions Session[]
}

model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
// ...другие поля
user User @relation(fields: [userId], references: [id])
}

model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id])
}

model VerificationToken {
identifier String
token String @unique
expires DateTime
}

5. Преимущества

  • Сокращение кода: Не нужно писать CRUD-операции для аутентификации
  • Типобезопасность: Использует типы Prisma Client
  • Поддержка транзакций: Все операции выполняются через Prisma
  • Кастомизация: Легко расширять модели своими полями (например, role)

6. Отличия от ручной реализации

С адаптером Без адаптера

Код для работы с БД 0 строк 100+ строк

Синхронизация схемы Автоматическая Ручное управление

Безопасность Стандартизированные запросы Риск ошибок в SQL-запросах

7. Когда использовать

  • Если ваше приложение уже использует Prisma
  • Для быстрой интеграции аутентификации
  • Когда нужна типобезопасность данных пользователя
  • Для поддержки multiple providers (OAuth + credentials)

Важно: Адаптер не заменяет миграции! После изменения моделей в schema.prisma нужно:

bash:

npx prisma migrate dev
npx prisma generate

Итог

@auth/prisma-adapter — это "волшебный мост", который избавляет вас от рутинной работы с БД при реализации аутентификации, сохраняя гибкость и безопасность. Он особенно полезен в проектах, где Prisma уже используется для работы с данными.