diff --git a/docs/API.md b/docs/API.md index 7b3dcdf..664753e 100644 --- a/docs/API.md +++ b/docs/API.md @@ -48,7 +48,8 @@ Body: { "username": "maria", "password": "123456", - "encrypted_master_key": "texto_cifrado_opcional" + "encrypted_master_key": "texto_cifrado_opcional", + "deviceName": "Flutter Pixel" } ``` diff --git a/src/controllers/authController.js b/src/controllers/authController.js index 3f03f7b..dbe9b21 100644 --- a/src/controllers/authController.js +++ b/src/controllers/authController.js @@ -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 }); diff --git a/src/services/authService.js b/src/services/authService.js index f13b2b8..c886d9d 100644 --- a/src/services/authService.js +++ b/src/services/authService.js @@ -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