Next.js Discord

Discord Forum

How can I access request in jwt callback?

Unanswered
Cape lion posted this in #help-forum
Open in Discord
Cape lionOP
import connectToDB from "@/backend/config/db.Connect";
import User, { IUser } from "@/backend/models/user";
import NextAuth from "next-auth/next";
import CredentialsProvider from "next-auth/providers/credentials";
import bcrypt from "bcryptjs";
import { AuthOptions } from "next-auth";

interface Creds {
email: string;
password: string;
}

const login = async (creds: Creds) => {
const { email, password } = creds;
try {
connectToDB();
const user = await User.findOne({ email }).select("+password");

if (!user) {
throw new Error("Wrong Creds!");
}

const isPasswordMatched = await bcrypt.compare(password, user.password);

if (!isPasswordMatched) {
throw new Error("Wrong Creds!");
}
return user;
} catch (error: any) {
throw new Error(error.message);
}
};

const authOptions: AuthOptions = {
providers: [
CredentialsProvider({
name: "credentials",
credentials: {},
// @ts-ignore
async authorize(credentials: Creds, req: NextApiRequest) {
const user = await login(credentials);
return user;
},
}),
],
session: {
strategy: "jwt",
},
secret: process.env.NEXTAUTH_SECRET,
pages: {
signIn: "/login",
},
callbacks: {
jwt: async ({ token, user }) => {
if (user) {
token.user = user;
}

// TODO : Update session when user is updated.
return token
},
session: async ({ session, token }) => {
session.user = token.user as IUser;
// @ts-ignore
delete session?.user?.password;
return session;
},
},
};

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };

0 Replies