import {
BETTER_AUTH_SECRET,
GOOGLE_CLIENT_ID,
GOOGLE_CLIENT_SECRET,
isDev,
MONGODB_DB,
MONGODB_URI,
NEXT_PUBLIC_BASE_URL,
} from "@/shared/constants/env";
import { betterAuth } from "better-auth";
import { mongodbAdapter } from "better-auth/adapters/mongodb";
import { nextCookies } from "better-auth/next-js";
import { MongoClient } from "mongodb";
import { openAPI } from "better-auth/plugins";
import { admin, anonymous } from "better-auth/plugins";
import { adminAc, userAc } from "better-auth/plugins/admin/access";
const client = new MongoClient(MONGODB_URI, {
replicaSet: "rs0",
directConnection: true,
});
const db = client.db(MONGODB_DB);
export const auth = betterAuth({
secret: BETTER_AUTH_SECRET,
baseURL: NEXT_PUBLIC_BASE_URL,
database: mongodbAdapter(db, {
client,
usePlural: true,
}),
emailAndPassword: {
enabled: true,
},
socialProviders:
GOOGLE_CLIENT_ID && GOOGLE_CLIENT_SECRET
? {
google: {
clientId: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
},
}
: {},
plugins: [
nextCookies(),
...(isDev ? [anonymous(), openAPI()] : []),
admin({
defaultRole: "user",
adminRoles: ["admin", "owner"],
roles: {
owner: adminAc,
admin: adminAc,
user: userAc,
},
}),
],
});
import {
BETTER_AUTH_SECRET,
GOOGLE_CLIENT_ID,
GOOGLE_CLIENT_SECRET,
isDev,
MONGODB_DB,
MONGODB_URI,
NEXT_PUBLIC_BASE_URL,
} from "@/shared/constants/env";
import { betterAuth } from "better-auth";
import { mongodbAdapter } from "better-auth/adapters/mongodb";
import { nextCookies } from "better-auth/next-js";
import { MongoClient } from "mongodb";
import { openAPI } from "better-auth/plugins";
import { admin, anonymous } from "better-auth/plugins";
import { adminAc, userAc } from "better-auth/plugins/admin/access";
const client = new MongoClient(MONGODB_URI, {
replicaSet: "rs0",
directConnection: true,
});
const db = client.db(MONGODB_DB);
export const auth = betterAuth({
secret: BETTER_AUTH_SECRET,
baseURL: NEXT_PUBLIC_BASE_URL,
database: mongodbAdapter(db, {
client,
usePlural: true,
}),
emailAndPassword: {
enabled: true,
},
socialProviders:
GOOGLE_CLIENT_ID && GOOGLE_CLIENT_SECRET
? {
google: {
clientId: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
},
}
: {},
plugins: [
nextCookies(),
...(isDev ? [anonymous(), openAPI()] : []),
admin({
defaultRole: "user",
adminRoles: ["admin", "owner"],
roles: {
owner: adminAc,
admin: adminAc,
user: userAc,
},
}),
],
});