Fix access token naming consistency and enforce encrypted_master_key validation in registration
Despliegue Automático / desplegar (push) Successful in 35s

This commit is contained in:
2026-07-28 20:09:23 +02:00
parent d73e1b2ddd
commit 636d20d7a0
2 changed files with 14 additions and 11 deletions
+9 -6
View File
@@ -16,6 +16,9 @@ const register = async (req, res) => {
if (!email || !password) {
return res.status(400).json({ error: 'Usuario y contraseña son obligatorios' });
}
if (!encrypted_master_key) {
return res.status(400).json({ error: 'encrypted_master_key es obligatorio' });
}
console.log(`Intentando registrar usuario: ${email}`);
console.log(`Encrypted Master Key recibida: ${encrypted_master_key}`);
// Registramos el usuario y emitimos tokens para entrar directamente
@@ -23,11 +26,11 @@ const register = async (req, res) => {
// Generamos tokens reutilizando el flujo de login (no hay deviceName en register)
const nombreDispositivo = deviceName || req.headers['user-agent'] || 'Dispositivo Desconocido';
const { accessToken, refresh_token } = await authService.login(email, password, nombreDispositivo);
const { access_token, refresh_token } = await authService.login(email, password, nombreDispositivo);
res.status(201).json({
message: 'Usuario registrado con éxito',
accessToken,
access_token,
refresh_token
});
} catch (error) {
@@ -43,11 +46,11 @@ const login = async (req, res) => {
// Si Flutter no envía un nombre, intentamos leer el User-Agent
const nombreDispositivo = deviceName || req.headers['user-agent'] || 'Dispositivo Desconocido';
const { encrypted_master_key, accessToken, refresh_token } = await authService.login(email, password, nombreDispositivo);
const { encrypted_master_key, access_token, refresh_token } = await authService.login(email, password, nombreDispositivo);
res.json({
message: 'Login exitoso',
accessToken,
access_token,
refresh_token,
encrypted_master_key: encrypted_master_key
});
@@ -62,8 +65,8 @@ const refresh = async (req, res) => {
const { refresh_token } = req.body;
if (!refresh_token) return res.status(400).json({ error: 'Refresh token es obligatorio' });
const { accessToken } = await authService.refreshAccessToken(refresh_token);
res.json({ accessToken });
const { access_token } = await authService.refreshaccess_token(refresh_token);
res.json({ access_token });
} catch (error) {
res.status(401).json({ error: error.message });
}
+5 -5
View File
@@ -34,7 +34,7 @@ class AuthService {
if (!isValid) throw new Error('Credenciales inválidas');
// A. Generar Access Token (Vence en 15 minutos - Sin datos sensibles)
const accessToken = jwt.sign(
const access_token = jwt.sign(
{ id: user.id, email: user.email },
JWT_SECRET,
{ expiresIn: '15m' }
@@ -50,11 +50,11 @@ class AuthService {
userId: user.id
});
return { encrypted_master_key: user.encrypted_master_key, accessToken, refreshToken: randomToken };
return { encrypted_master_key: user.encrypted_master_key, access_token, refreshToken: randomToken };
}
// REFRESH: Intercambia un Refresh Token válido por un nuevo Access Token limpio
async refreshAccessToken(tokenRecibido) {
async refreshaccess_token(tokenRecibido) {
// 1. Buscar el token en la base de datos de Postgres
const tokenGuardado = await RefreshToken.findOne({
where: { token: tokenRecibido },
@@ -68,13 +68,13 @@ class AuthService {
const user = tokenGuardado.User;
// 2. Si existe, emitimos un nuevo Access Token de 15 minutos
const newAccessToken = jwt.sign(
const newaccess_token = jwt.sign(
{ id: user.id, email: user.email },
JWT_SECRET,
{ expiresIn: '15m' }
);
return { accessToken: newAccessToken };
return { access_token: newaccess_token };
}
// CERRAR SESIÓN EN UN SOLO DISPOSITIVO (El bisturí)