Files
n3wt-school/Front-End/src/pages/api/auth/[...nextauth].js
2025-02-21 19:22:33 +01:00

84 lines
2.3 KiB
JavaScript

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);