Files
THE-TIP-TOP/backend/src/middlewares/auth.middleware.js

50 lines
1.3 KiB
JavaScript

const jwt = require("jsonwebtoken");
const prisma = require("../config/prisma");
const authMiddleware = async (req, res, next) => {
try {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith("Bearer ")) {
return res.status(401).json({
message: "Token manquant ou invalide.",
});
}
const token = authHeader.split(" ")[1];
const decoded = jwt.verify(token, process.env.JWT_SECRET);
const user = await prisma.user.findUnique({
where: { id: decoded.id },
select: {
id: true,
firstname: true,
lastname: true,
email: true,
role: true,
provider: true,
password: true,
},
});
if (!user) {
return res.status(401).json({
message: "Utilisateur introuvable.",
});
}
// req.user est renvoyé tel quel par /api/auth/me : on remplace le hash par
// un simple booléen, qui suffit au profil pour proposer « définir » ou
// « modifier » son mot de passe.
const { password, ...rest } = user;
req.user = { ...rest, hasPassword: Boolean(password) };
next();
} catch (error) {
return res.status(401).json({
message: "Token invalide ou expiré.",
});
}
};
module.exports = authMiddleware;