MikroORM Adapter
Resources
Setup
Installation
npm install @mikro-orm/core @auth/mikro-orm-adapter
Environment Variables
DATABASE_CONNECTION_STRING=./db.sqlite
Configuration
./auth.ts
import NextAuth from "next-auth"
import { MikroOrmAdapter } from "@auth/mikro-orm-adapter"
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: MikroOrmAdapter({
// MikroORM options object - https://mikro-orm.io/docs/next/configuration#driver
dbName: process.env.DATABASE_CONNECTION_STRING,
type: "sqlite",
debug: true,
}),
providers: [],
})
Advanced usage
Passing custom entities
The MikroORM adapter ships with its own set of entities. If you’d like to extend them, you can optionally pass them to the adapter.
This schema is adapted for use in MikroORM and based upon our main schema
./auth.ts
import config from "config/mikro-orm.ts"
import {
Cascade,
Collection,
Entity,
OneToMany,
PrimaryKey,
Property,
Unique,
} from "@mikro-orm/core"
import { defaultEntities } from "@auth/mikro-orm-adapter"
const { Account, Session } = defaultEntities
@Entity()
export class User implements defaultEntities.User {
@PrimaryKey()
id: string = randomUUID()
@Property({ nullable: true })
name?: string
@Property({ nullable: true })
@Unique()
email?: string
@Property({ type: "Date", nullable: true })
emailVerified: Date | null = null
@Property({ nullable: true })
image?: string
@OneToMany({
entity: () => Session,
mappedBy: (session) => session.user,
hidden: true,
orphanRemoval: true,
cascade: [Cascade.ALL],
})
sessions = new Collection<Session>(this)
@OneToMany({
entity: () => Account,
mappedBy: (account) => account.user,
hidden: true,
orphanRemoval: true,
cascade: [Cascade.ALL],
})
accounts = new Collection<Account>(this)
@Enum({ hidden: true })
role = "ADMIN"
}
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: MikroOrmAdapter(config, { entities: { User } }),
})
Including default entities
You may want to include the defaultEntities in your MikroORM configuration to include them in Migrations etc.
To achieve that include them in your “entities” array:
config/mikro-orm.ts
import { Options } from "@mikro-orm/core"
import { defaultEntities } from "@auth/mikro-orm-adapter"
const config: Options = {
entities: [VeryImportantEntity, ...Object.values(defaultEntities)],
}
export default config