skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
50 lines • 1.8 kB
JavaScript
import jwt from "jsonwebtoken";
const JWT_SECRET = process.env.JWT_SECRET || "skailan-secret";
export const requireAuth = async (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader) {
res.status(401).json({ error: "No autenticado." });
return;
}
const token = authHeader.split(" ")[1];
if (!token) {
res.status(401).json({ error: "Token no proporcionado." });
return;
}
try {
const payload = jwt.verify(token, JWT_SECRET);
req.user = payload;
// Si el token incluye una organización activa, verificar la membresía
if (payload.activeOrg) {
const tenantPrisma = req.tenantPrisma;
if (!tenantPrisma) {
res.status(500).json({ error: "Tenant Prisma client not available." });
return;
}
const membership = await tenantPrisma.membership.findUnique({
where: {
userId_organizationId: {
userId: payload.id,
organizationId: payload.activeOrg,
},
},
include: {
organization: true,
},
});
if (!membership || membership.status !== "ACTIVE") {
res.status(403).json({ error: "No eres miembro activo de esta organización." });
return;
}
req.organization = membership.organization;
req.membership = membership;
}
next();
}
catch (error) {
console.error("Error en la autenticación:", error);
res.status(401).json({ error: "Token inválido o expirado." });
return;
}
};
//# sourceMappingURL=auth.js.map