Back to roadmaps authjs Course

Database Schema Requirements for Auth.js

For the Prisma Adapter to work correctly, your PostgreSQL/MySQL database must contain tables that match the schema definitions required by Auth.js.


1. Required Prisma Data Models

Add these models to your schema.prisma configuration file:

// schema.prisma

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

model Account {
  id                String  @id @default(cuid())
  userId            String
  type              String
  provider          String
  providerAccountId String
  refresh_token     String? @db.Text
  access_token      String? @db.Text
  expires_at        Int?
  token_type        String?
  scope             String?
  id_token          String? @db.Text
  session_state     String?

  user User @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@unique([provider, providerAccountId])
}

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

model VerificationToken {
  identifier String
  token      String   @unique
  expires    DateTime

  @@unique([identifier, token])
}

2. Reviewing the Model Roles

  • User: Stores profile metadata (name, email, avatar image url).
  • Account: Stores OAuth login details returned by social providers (such as GitHub access tokens). A single user can link multiple social logins to their account.
  • Session: Stores active stateful tokens for browser users (only updated if database strategy is active).
  • VerificationToken: Used for passwordless email verification magic links.
Published on Last updated: