mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
108 lines
2.7 KiB
JavaScript
108 lines
2.7 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",
|
|
maxAge: 30 * 24 * 60 * 60, // 30 jours
|
|
updateAge: 24 * 60 * 60, // 24 heures
|
|
},
|
|
cookies: {
|
|
sessionToken: {
|
|
name: 'n3wtschool_session_token',
|
|
options: {
|
|
httpOnly: true,
|
|
sameSite: 'lax',
|
|
path: '/',
|
|
secure: process.env.NODE_ENV === 'production'
|
|
}
|
|
}
|
|
},
|
|
callbacks: {
|
|
async jwt({ token, user, trigger }) {
|
|
// Si c'est la première connexion
|
|
if (user) {
|
|
return {
|
|
...token,
|
|
token: user.token,
|
|
refresh: user.refresh,
|
|
tokenExpires: jwt_decode.decode(user.token).exp * 1000
|
|
};
|
|
}
|
|
|
|
// Vérifier si le token n'est pas expiré
|
|
if (Date.now() < token.tokenExpires) {
|
|
return token;
|
|
}
|
|
|
|
// Token expiré, essayer de le rafraîchir
|
|
try {
|
|
const response = await refreshJWT({ refresh: token.refresh });
|
|
if (!response) {
|
|
throw new Error('Failed to refresh token');
|
|
}
|
|
|
|
return {
|
|
...token,
|
|
token: response.token,
|
|
refresh: response.refresh,
|
|
tokenExpires: jwt_decode.decode(response.token).exp * 1000
|
|
};
|
|
} catch (error) {
|
|
console.error("Refresh token failed:", error);
|
|
return token;
|
|
}
|
|
},
|
|
async session({ session, token }) {
|
|
if (token) {
|
|
const {user_id, droit, email} = jwt_decode.decode(token.token);
|
|
session.user = {
|
|
...session.user,
|
|
token: token.token,
|
|
refresh: token.refresh
|
|
};
|
|
session.user.user_id = user_id;
|
|
session.user.droit = droit;
|
|
session.user.email = email;
|
|
}
|
|
return session;
|
|
}
|
|
},
|
|
pages: {
|
|
signIn: '/[locale]/users/login'
|
|
},
|
|
csrf: true
|
|
};
|
|
|
|
export default (req, res) => NextAuth(req, res, options); |