import { AuthOptions } from 'next-auth'; import { PrismaAdapter } from '@next-auth/prisma-adapter'; import Credentials from 'next-auth/providers/credentials'; import { PrismaClient } from '@prisma/client'; import bcrypt from 'bcryptjs'; const prisma = new PrismaClient(); export const options: AuthOptions = { providers: [ Credentials({ credentials: { email: { label: 'Email', type: 'email', placeholder: 'E-Mail' }, password: { label: 'Password', type: 'password' }, }, async authorize(credentials, req) { try { if (!credentials) throw new Error('No credentials provided'); const user = await prisma.user.findFirstOrThrow({ where: { email: credentials.email }, }); if (bcrypt.compareSync(credentials.password, user.password)) { console.log('User found and password correct', user); return user; } return null; } catch (error) { return null; } }, }), ], secret: process.env.SECRET, session: { strategy: 'jwt', maxAge: 30 * 24 * 60 * 60, }, adapter: PrismaAdapter(prisma), events: { async signIn(message) { console.log('Signed in!', { message }); }, async signOut(message) { console.log('Signed out!', { message }); }, async createUser(message) { console.log('User created!', { message }); }, }, callbacks: { jwt: async ({ token, user }) => { if (user) { token.uid = user; } return token; }, session: async ({ session, token }: any) => { // here we put session.useData and put inside it whatever you want to be in the session // here try to console.log(token) and see what it will have // sometimes the user get stored in token.uid.userData // sometimes the user data get stored in just token.uid session.userData = token.uid.userData; return session; }, }, pages: { signIn: '/login', signOut: '/logout', error: '/authError', newUser: '/register', }, } satisfies AuthOptions;