I am builidhg a credentials based authentication module in next.js using next auth library. Everything seems to be working fine. When I try to inject token with some extra information from user, it is getting undefined.
Here is the code for Credentials Provider
import { connectToDb } from "@/lib/db";
import { AuthOptions } from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
import prisma from "../../../../../prisma";
import bcryptjs from 'bcryptjs'
const options: AuthOptions = {
providers: [
CredentialsProvider({
name: "Credentials",
credentials: {
email: { label: "Email", type: "text" },
password: { label: "Password", type: "password" },
},
async authorize(credentials, req): Promise<any> {
await connectToDb();
console.log(credentials?.email, credentials?.password)
const user = await prisma.user.findMany({
where: {
email: credentials?.email,
}
})
if (!user || !user[0]) {
throw new Error("User not found")
}
const validPassword = await bcryptjs.compare(credentials?.password as string, user[0].password)
if (!validPassword) {
throw new Error("Invalid password")
}
return user;
}
})
],
session: {
strategy: "jwt"
},
secret: process.env.NEXTAUTH_SECRET,
pages: {
signIn: '/login',
},
callbacks: {
async jwt({ token, user }) {
console.log("jwt callback", user)
if (user) {
console.log("user", user)
token.id = user.id as string
token.role = user.role;
}
console.log("Token obect", token)
return token;
},
async session({ session, token }) {
session.user.id = token.id as string;
session.user.role = token.role as string;
console.log("session callback", session)
return session
}
},
}
export { options }
When I try to console.log both token and session, it is showing undefined. Someone please help me with this.