import NextAuth from 'next-auth'; import CredentialsProvider from 'next-auth/providers/credentials'; import { getJWT, refreshJWT } from '@/app/actions/authAction'; import jwt_decode from 'jsonwebtoken'; // Changed import const options = { providers: [ CredentialsProvider({ name: 'Credentials', credentials: { email: { label: 'Email', type: 'email' }, password: { label: 'Password', type: 'password' } }, authorize: async (credentials, req) => { try { const data = { email: credentials.email, password: credentials.password }; const user = await getJWT(data); if (user) { console.log("API response:", user); return user; } throw new Error('Invalid credentials'); } catch (error) { throw new Error(error.message || 'Invalid credentials'); } } }) ], session: { strategy:"jwt", }, callbacks: { async jwt({ token, user }) { if (user) { token.token = user.token; token.refresh = user.refresh; token.tokenExpires = jwt_decode.decode(user.token).exp * 1000; } // Vérifie si l'access token a expiré if (Date.now() < token.tokenExpires) { return token; } // Renouvelle le token expiré try { const data = {refresh: token.refresh} const res = await refreshJWT(data); console.log(res); token.token = res.token; token.refresh = res.refresh; token.tokenExpires = jwt_decode.decode(res.token).exp * 1000; console.log("Token refreshed", token); return token; } catch (error) { console.error("Erreur lors du rafraîchissement du token", error); return token; } }, async session({ session, token }) { console.log("Session callback called", token); if (!token) { throw new Error('Token not found'); } else{ const decodedToken = jwt_decode.decode(token.token); const {user_id,email,droit} = decodedToken; session.user = {id:user_id,email,droit}; return session; } } }, pages: { signIn: '/[locale]/users/login' }, csrf: true }; export default (req, res) => NextAuth(req, res, options);