/api/auth/[...nextauth]/route.ts
import NextAuth from "next-auth";
import { authOptions } from "@/app/lib/auth";
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
/lib/auth.ts
import axios from "axios";
import NextAuth, { AuthOptions } from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
export const authOptions: AuthOptions = {
providers: [
CredentialsProvider({
name: "Credentials",
credentials: {
email: { label: "email", type: "text" },
password: { label: "password", type: "password" },
},
async authorize(credentials) {
try {
if (!credentials?.email || !credentials?.password) {
return Promise.resolve(null);
}
const response = await axios.post(
"https://x.x.x/user/signin",
{
email: credentials.email,
password: credentials.password,
}
);
if (response.status === 200) {
const data = await response.data;
return Promise.resolve({
id: data.user.id,
email: data.user.email,
firstname: data.user.firstname,
lastname: data.user.lastname,
country: data.user.country,
token: data.token,
});
} else {
return Promise.resolve(null);
}
} catch (error) {
console.error(error);
return Promise.resolve(null);
}
},
}),
],
session: {
strategy: "jwt",
},
debug: process.env.NODE_ENV === "development",
callbacks: {
async jwt({ token, user }) {
return { ...token, ...user };
},
async session({ session, token }) {
session.user = token as any;
return session;
},
},
secret: process.env.NEXTAUTH_SECRET,
};