docs/pages/getting-started/adapters/sequelize.mdx
import { Callout } from "nextra/components" import { Code } from "@/components/Code"
npm install @auth/sequelize-adapter sequelize
DATABASE_URL=postgres://postgres:[email protected]:5432/db
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>
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>
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>
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>
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
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,
})
Sequelize models are option to customization like so:
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,
}),
},
}),
})