refactor: migrate authentication to NextAuth and clean up related services

This commit is contained in:
Julien Froidefond
2025-10-12 15:45:09 +02:00
parent 117ac243f5
commit 7d12a66c12
25 changed files with 558 additions and 353 deletions

69
auth.ts Normal file
View File

@@ -0,0 +1,69 @@
import NextAuth from "next-auth";
import Credentials from "next-auth/providers/credentials";
export const { handlers, signIn, signOut, auth } = NextAuth({
providers: [
Credentials({
credentials: {
email: { label: "Email", type: "email" },
password: { label: "Password", type: "password" },
},
async authorize(credentials) {
if (!credentials?.email || !credentials?.password) {
return null;
}
// Import dynamique pour éviter l'erreur Edge Runtime dans le middleware
const { userService } = await import("@/services/user-service");
const user = await userService.verifyCredentials(
credentials.email as string,
credentials.password as string
);
if (!user) {
return null;
}
// Retourner l'utilisateur au format attendu par NextAuth
return {
id: user.uuid_id,
email: user.email,
name: `${user.first_name} ${user.last_name}`,
firstName: user.first_name,
lastName: user.last_name,
teamId: user.team_id,
};
},
}),
],
pages: {
signIn: "/login",
},
session: {
strategy: "jwt",
},
callbacks: {
async jwt({ token, user }) {
// Lors de la première connexion, ajouter les infos custom au token
if (user) {
token.id = user.id;
token.teamId = (user as any).teamId;
token.firstName = (user as any).firstName;
token.lastName = (user as any).lastName;
}
return token;
},
async session({ session, token }) {
// Ajouter les infos du token à la session
if (token && session.user) {
session.user.id = token.id as string;
session.user.teamId = token.teamId as string;
session.user.firstName = token.firstName as string;
session.user.lastName = token.lastName as string;
}
return session;
},
},
});