feat: add nextauth config

This commit is contained in:
Orace.A 2025-03-25 15:31:54 +01:00
parent ae7f66aa78
commit 44c19d2813
2 changed files with 62 additions and 29 deletions

12
auth.d.ts vendored Normal file
View File

@ -0,0 +1,12 @@
import { DefaultSession } from "next-auth";
declare module "next-auth" {
export interface User extends Partial<DefaultSession<User>> {
access_token: string;
refresh_token: string;
}
export interface Session {
user: User;
}
}

View File

@ -1,6 +1,6 @@
import NextAuth, { User } from "next-auth"; import NextAuth, { User } from "next-auth";
import Credentials from "next-auth/providers/credentials"; import Credentials from "next-auth/providers/credentials";
import axios, { AxiosError } from "axios"; import axios from "axios";
import { jwtDecode } from "jwt-decode"; import { jwtDecode } from "jwt-decode";
const handler = NextAuth({ const handler = NextAuth({
@ -11,37 +11,58 @@ const handler = NextAuth({
password: {}, password: {},
}, },
async authorize(credentials) { async authorize(credentials) {
let user: User | null = null; try {
const response = await axios.post(
const response = axios({ 'private-docs-api.intside.co/users/login/',
method: 'post', {
url: 'private-docs-api.intside.co/users/login/', email: credentials?.email,
data: { password: credentials?.password,
email: credentials?.email,
password: credentials?.password,
}
})
.then(function (response: any) {
const { user_id } = jwtDecode(response.access_token) as {
user_id: string;
};
})
.catch(function (error) {
if (error instanceof AxiosError) {
if (error.status === 401) {
throw new Error("Email ou mot de passe incorrect");
} else {
throw new Error(error.message, error);
} }
} )
throw new Error("Une erreur est survenue");
}); const { access_token, refresh_token } = response.data;
const { id } = jwtDecode(access_token) as { id: string };
return {
id: id,
email: credentials?.email,
access_token: access_token,
refresh_token: refresh_token
} as User;
} catch (error) {
if (axios.isAxiosError(error)) {
if (error.response?.status === 401) {
throw new Error("Email ou mot de passe incorrect");
}
throw new Error(error.response?.data?.message || error.message);
}
throw new Error("Une erreur est survenue");
}
}, },
}) })
] ],
session: {
strategy: "jwt",
},
callbacks: {
async jwt({ token, user }) {
if (user) {
token.access_token = user.access_token;
token.refresh_token = user.refresh_token;
}
return token;
},
async session({ session, token }) {
return {
...session,
user: {
...session.user,
...token,
},
};
},
},
secret: process.env.AUTH_SECRET ?? "",
}); });
export { handler as GET, handler as POST }; export { handler as GET, handler as POST };