mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
84 lines
2.3 KiB
JavaScript
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); |