Back to Next Auth

Sequelize Adapter

docs/pages/getting-started/adapters/sequelize.mdx

4.2.13.9 KB
Original Source

import { Callout } from "nextra/components" import { Code } from "@/components/Code"

Sequelize Adapter

Resources

Setup

Installation

bash
npm install @auth/sequelize-adapter sequelize

Environment Variables

sh
DATABASE_URL=postgres://postgres:[email protected]:5432/db

Configuration

<Callout type="warning"> You'll also have to manually install [the driver for your database](https://sequelize.org/master/manual/getting-started.html) of choice. </Callout> <Code> <Code.Next>
ts
import NextAuth from "next-auth"
import SequelizeAdapter from "@auth/sequelize-adapter"
import { Sequelize } from "sequelize"

const sequelize = new Sequelize(process.env.DATABASE_URL)

export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [],
  adapter: SequelizeAdapter(sequelize),
})

</Code.Next> <Code.Qwik>

ts
import { QwikAuth$ } from "@auth/qwik"
import SequelizeAdapter from "@auth/sequelize-adapter"
import { Sequelize } from "sequelize"

const sequelize = new Sequelize(import.meta.env.DATABASE_URL)

export const { onRequest, useSession, useSignIn, useSignOut } = QwikAuth$(
  () => ({
    providers: [],
    adapter: SequelizeAdapter(sequelize),
  })
)

</Code.Qwik> <Code.Svelte>

ts
import { SvelteKitAuth } from "@auth/sveltekit"
import SequelizeAdapter from "@auth/sequelize-adapter"
import { Sequelize } from "sequelize"

const sequelize = new Sequelize(process.env.DATABASE_URL)

export const { handle, signIn, signOut } = SvelteKitAuth({
  providers: [],
  adapter: SequelizeAdapter(sequelize),
})

</Code.Svelte> <Code.Express>

ts
import { ExpressAuth } from "@auth/express"
import SequelizeAdapter from "@auth/sequelize-adapter"
import { Sequelize } from "sequelize"

const sequelize = new Sequelize(process.env.DATABASE_URL)

const app = express()

app.set("trust proxy", true)
app.use(
  "/auth/*",
  ExpressAuth({
    providers: [],
    adapter: SequelizeAdapter(sequelize),
  })
)

</Code.Express> </Code>

Schema

By default, the sequelize adapter will not create tables in your database. In production, best practice is to create the required tables in your database via migrations. In development, you are able to call sequelize.sync() to have sequelize create the necessary tables, foreign keys and indexes:

This schema is adapted for use in Sequelize and based upon our main schema

ts
import NextAuth from "next-auth"
import SequelizeAdapter from "@auth/sequelize-adapter"
import Sequelize from "sequelize"

const sequelize = new Sequelize("sqlite::memory:")
const adapter = SequelizeAdapter(sequelize)

// Calling sync() is not recommended in production
sequelize.sync()

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

Advanced usage

Using custom models

Sequelize models are option to customization like so:

ts
import NextAuth from "next-auth"
import SequelizeAdapter, { models } from "@auth/sequelize-adapter"
import Sequelize, { DataTypes } from "sequelize"

const sequelize = new Sequelize("sqlite::memory:")

export const { handlers, auth, signIn, signOut } = NextAuth({
  // https://authjs.dev/reference/providers/
  providers: [],
  adapter: SequelizeAdapter(sequelize, {
    models: {
      User: sequelize.define("user", {
        ...models.User,
        phoneNumber: DataTypes.STRING,
      }),
    },
  }),
})