Fix access token naming consistency and enforce encrypted_master_key validation in registration
Despliegue Automático / desplegar (push) Successful in 35s
Despliegue Automático / desplegar (push) Successful in 35s
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
|
||||
@@ -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í)
|
||||
|
||||
Reference in New Issue
Block a user