Add deviceName to registration and login processes for better device tracking
Despliegue Automático / desplegar (push) Successful in 4m17s

This commit is contained in:
2026-07-28 18:17:11 +02:00
parent 87cde27436
commit 4da7cad9d8
3 changed files with 16 additions and 15 deletions
+12 -12
View File
@@ -11,7 +11,7 @@ if (!JWT_SECRET) {
const register = async (req, res) => {
try {
console.log(req.body); // Log completo del body para depuración
const { username, password, encrypted_master_key } = req.body;
const { username, password, encrypted_master_key, deviceName } = req.body;
if (!username || !password) {
return res.status(400).json({ error: 'Usuario y contraseña son obligatorios' });
@@ -22,13 +22,13 @@ const register = async (req, res) => {
await authService.register(username, password, encrypted_master_key);
// Generamos tokens reutilizando el flujo de login (no hay deviceName en register)
const nombreDispositivo = req.headers['user-agent'] || 'Dispositivo Desconocido';
const { accessToken, refreshToken } = await authService.login(username, password, nombreDispositivo);
const nombreDispositivo = deviceName || req.headers['user-agent'] || 'Dispositivo Desconocido';
const { accessToken, refresh_token } = await authService.login(username, password, nombreDispositivo);
res.status(201).json({
message: 'Usuario registrado con éxito',
accessToken,
refreshToken
refresh_token
});
} catch (error) {
res.status(400).json({ error: error.message });
@@ -43,13 +43,13 @@ 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 { user, accessToken, refreshToken } = await authService.login(username, password, nombreDispositivo);
const { encrypted_master_key, accessToken, refresh_token } = await authService.login(username, password, nombreDispositivo);
res.json({
message: 'Login exitoso',
accessToken,
refreshToken,
encrypted_master_key: user.encrypted_master_key
refresh_token,
encrypted_master_key: encrypted_master_key
});
} catch (error) {
res.status(401).json({ error: error.message });
@@ -59,10 +59,10 @@ const login = async (req, res) => {
// 3. REFRESCAR TOKEN
const refresh = async (req, res) => {
try {
const { refreshToken } = req.body;
if (!refreshToken) return res.status(400).json({ error: 'Refresh token es obligatorio' });
const { refresh_token } = req.body;
if (!refresh_token) return res.status(400).json({ error: 'Refresh token es obligatorio' });
const { accessToken } = await authService.refreshAccessToken(refreshToken);
const { accessToken } = await authService.refreshAccessToken(refresh_token);
res.json({ accessToken });
} catch (error) {
res.status(401).json({ error: error.message });
@@ -72,8 +72,8 @@ const refresh = async (req, res) => {
// 4. CERRAR SESIÓN
const logout = async (req, res) => {
try {
const { refreshToken } = req.body;
await authService.logoutDevice(refreshToken);
const { refresh_token } = req.body;
await authService.logoutDevice(refresh_token);
res.json({ message: 'Sesión cerrada en el dispositivo actual' });
} catch (error) {
res.status(400).json({ error: error.message });
+2 -2
View File
@@ -46,11 +46,11 @@ class AuthService {
// C. Guardar el Refresh Token asociado al dispositivo en PostgreSQL
await RefreshToken.create({
token: randomToken,
deviceName: deviceName || 'Dispositivo Móvil',
deviceName: deviceName || 'Dispositivo Desconocido',
userId: user.id
});
return { user, accessToken, refreshToken: randomToken };
return { encrypted_master_key: user.encrypted_master_key, accessToken, refreshToken: randomToken };
}
// REFRESH: Intercambia un Refresh Token válido por un nuevo Access Token limpio