@next-auth/mikro-orm-adapter
Official MikroORM adapter for Auth.js / NextAuth.js.
Installationβ
- npm
- yarn
- pnpm
npm install next-auth @next-auth/dynamodb-adapter @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb
yarn add next-auth @next-auth/dynamodb-adapter @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb
pnpm add next-auth @next-auth/dynamodb-adapter @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb
MikroOrmAdapter()β
Setupβ
Configure Auth.js to use the MikroORM Adapter:
pages/api/auth/[...nextauth].ts
import NextAuth from "next-auth";
import { MikroOrmAdapter } from "@next-auth/mikro-orm-adapter";
export default NextAuth({
adapter: MikroOrmAdapter({
// MikroORM options object. Ref: https://mikro-orm.io/docs/next/configuration#driver
dbName: "./db.sqlite",
type: "sqlite",
debug: process.env.DEBUG === "true" || process.env.DEBUG?.includes("db"),
}),
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
pages/api/auth/[...nextauth].ts
import config from "config/mikro-orm.ts";
import {
Cascade,
Collection,
Entity,
OneToMany,
PrimaryKey,
Property,
Unique,
} from "@mikro-orm/core";
import { defaultEntities } from "@next-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 default 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 "@next-auth/mikro-orm-adapter"
const config: Options = {
...
entities: [VeryImportantEntity, ...Object.values(defaultEntities)],
};
export default config;
MikroOrmAdapter<D>(
ormOptions
:Options
<D
>,options
?:object
):Adapter
Type parametersβ
D
extendsIDatabaseDriver
<Connection
,D
> =IDatabaseDriver
<Connection
>
Parametersβ
Parameter | Type |
---|---|
ormOptions | Options <D > |
options? | object |
options.entities? | Partial <__module > |
Returnsβ
Adapter