Add deviceName to registration and login processes for better device tracking
Despliegue Automático / desplegar (push) Successful in 4m17s
Despliegue Automático / desplegar (push) Successful in 4m17s
This commit is contained in:
+2
-1
@@ -48,7 +48,8 @@ Body:
|
|||||||
{
|
{
|
||||||
"username": "maria",
|
"username": "maria",
|
||||||
"password": "123456",
|
"password": "123456",
|
||||||
"encrypted_master_key": "texto_cifrado_opcional"
|
"encrypted_master_key": "texto_cifrado_opcional",
|
||||||
|
"deviceName": "Flutter Pixel"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ if (!JWT_SECRET) {
|
|||||||
const register = async (req, res) => {
|
const register = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
console.log(req.body); // Log completo del body para depuración
|
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) {
|
if (!username || !password) {
|
||||||
return res.status(400).json({ error: 'Usuario y contraseña son obligatorios' });
|
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);
|
await authService.register(username, password, encrypted_master_key);
|
||||||
|
|
||||||
// Generamos tokens reutilizando el flujo de login (no hay deviceName en register)
|
// Generamos tokens reutilizando el flujo de login (no hay deviceName en register)
|
||||||
const nombreDispositivo = req.headers['user-agent'] || 'Dispositivo Desconocido';
|
const nombreDispositivo = deviceName || req.headers['user-agent'] || 'Dispositivo Desconocido';
|
||||||
const { accessToken, refreshToken } = await authService.login(username, password, nombreDispositivo);
|
const { accessToken, refresh_token } = await authService.login(username, password, nombreDispositivo);
|
||||||
|
|
||||||
res.status(201).json({
|
res.status(201).json({
|
||||||
message: 'Usuario registrado con éxito',
|
message: 'Usuario registrado con éxito',
|
||||||
accessToken,
|
accessToken,
|
||||||
refreshToken
|
refresh_token
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(400).json({ error: error.message });
|
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
|
// Si Flutter no envía un nombre, intentamos leer el User-Agent
|
||||||
const nombreDispositivo = deviceName || req.headers['user-agent'] || 'Dispositivo Desconocido';
|
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({
|
res.json({
|
||||||
message: 'Login exitoso',
|
message: 'Login exitoso',
|
||||||
accessToken,
|
accessToken,
|
||||||
refreshToken,
|
refresh_token,
|
||||||
encrypted_master_key: user.encrypted_master_key
|
encrypted_master_key: encrypted_master_key
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(401).json({ error: error.message });
|
res.status(401).json({ error: error.message });
|
||||||
@@ -59,10 +59,10 @@ const login = async (req, res) => {
|
|||||||
// 3. REFRESCAR TOKEN
|
// 3. REFRESCAR TOKEN
|
||||||
const refresh = async (req, res) => {
|
const refresh = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { refreshToken } = req.body;
|
const { refresh_token } = req.body;
|
||||||
if (!refreshToken) return res.status(400).json({ error: 'Refresh token es obligatorio' });
|
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 });
|
res.json({ accessToken });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(401).json({ error: error.message });
|
res.status(401).json({ error: error.message });
|
||||||
@@ -72,8 +72,8 @@ const refresh = async (req, res) => {
|
|||||||
// 4. CERRAR SESIÓN
|
// 4. CERRAR SESIÓN
|
||||||
const logout = async (req, res) => {
|
const logout = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { refreshToken } = req.body;
|
const { refresh_token } = req.body;
|
||||||
await authService.logoutDevice(refreshToken);
|
await authService.logoutDevice(refresh_token);
|
||||||
res.json({ message: 'Sesión cerrada en el dispositivo actual' });
|
res.json({ message: 'Sesión cerrada en el dispositivo actual' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(400).json({ error: error.message });
|
res.status(400).json({ error: error.message });
|
||||||
|
|||||||
@@ -46,11 +46,11 @@ class AuthService {
|
|||||||
// C. Guardar el Refresh Token asociado al dispositivo en PostgreSQL
|
// C. Guardar el Refresh Token asociado al dispositivo en PostgreSQL
|
||||||
await RefreshToken.create({
|
await RefreshToken.create({
|
||||||
token: randomToken,
|
token: randomToken,
|
||||||
deviceName: deviceName || 'Dispositivo Móvil',
|
deviceName: deviceName || 'Dispositivo Desconocido',
|
||||||
userId: user.id
|
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
|
// REFRESH: Intercambia un Refresh Token válido por un nuevo Access Token limpio
|
||||||
|
|||||||
Reference in New Issue
Block a user