import { PrismaAdapter } from '@next-auth/prisma-adapter';
import { type User } from '@prisma/client';
import { type GetServerSidePropsContext } from 'next';
import { getServerSession, type DefaultSession, type NextAuthOptions } from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
import { env } from '../env.mjs';
import db from './db';
declare module 'next-auth' {
interface Session extends DefaultSession {
user: DefaultSession['user'] & User;
}
}
export const authOptions: NextAuthOptions = {
adapter: PrismaAdapter(db),
providers: [
GoogleProvider({
clientId: env.AUTH_GOOGLE_ID,
clientSecret: env.AUTH_GOOGLE_SECRET,
}),
],
callbacks: {
session: (s) => {
return { ...s.session, user: { ...s.session.user, ...s.user } };
},
},
events: {
linkAccount: async ({ user }) => {
await db.user.update({
where: { id: user.id },
data: { emailVerified: new Date() },
});
},
},
pages: {
signIn: '/auth/login',
error: '/auth/error',
newUser: '/auth/register',
},
};
export const getServerAuthSession = (ctx: { req: GetServerSidePropsContext['req']; res: GetServerSidePropsContext['res'] }) => {
return getServerSession(ctx.req, ctx.res, authOptions);
};
import { PrismaAdapter } from '@next-auth/prisma-adapter';
import { type User } from '@prisma/client';
import { type GetServerSidePropsContext } from 'next';
import { getServerSession, type DefaultSession, type NextAuthOptions } from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
import { env } from '../env.mjs';
import db from './db';
declare module 'next-auth' {
interface Session extends DefaultSession {
user: DefaultSession['user'] & User;
}
}
export const authOptions: NextAuthOptions = {
adapter: PrismaAdapter(db),
providers: [
GoogleProvider({
clientId: env.AUTH_GOOGLE_ID,
clientSecret: env.AUTH_GOOGLE_SECRET,
}),
],
callbacks: {
session: (s) => {
return { ...s.session, user: { ...s.session.user, ...s.user } };
},
},
events: {
linkAccount: async ({ user }) => {
await db.user.update({
where: { id: user.id },
data: { emailVerified: new Date() },
});
},
},
pages: {
signIn: '/auth/login',
error: '/auth/error',
newUser: '/auth/register',
},
};
export const getServerAuthSession = (ctx: { req: GetServerSidePropsContext['req']; res: GetServerSidePropsContext['res'] }) => {
return getServerSession(ctx.req, ctx.res, authOptions);
};