Tengo un problema extraño aquí, necesito enviar la hora actual en milisegundos desde Android para autorizar a todos los usuarios cuando intenten solicitar una API. Mi problema es que, cuando trato de comparar la solicitud de encabezado y el servidor de tiempo, tiene algo diferente, aproximadamente 12 horas, y sucede después de las 8 p.m. todos los días. Cuando intento llamar a la API a la mañana siguiente, el encabezado envía la marca de tiempo correcta con la hora del servidor.
Resultado después de las 8 p.m.
Time Request Header : 1639618812 Server Time : 1639662014 Max 5 Minutes : 1639662314 Min 5 Minutes : 1639661714Este es el resultado que probé recientemente
Time Request Header : 1639704110 Server Time : 1639704111 Max 5 Minutes : 1639704411 Min 5 Minutes : 1639703811Así es como generé la marca de tiempo con flutter
static String createXTimestamp() { DateTime test = DateTime.parse("1970-01-01 00:00:00"); String now = DateFormat('yyyy-MM-dd hh:mm:ss').format(DateTime.now().toUtc()); var tStamp = DateTime.parse(now).millisecondsSinceEpoch - test.millisecondsSinceEpoch; return tStamp.toString().substring(0,10); }Así es como se procesó en NodeJs
const dateNow = Math.floor(new Date().getTime() / 1000); var max5 = dateNow + 300; var min5 = dateNow - 300; var time = req.headers.time; if(time >= min5 && time <= max5) //always return false else res.json({error_code: 401, message: "Unauthorized User"});Esto realmente me confunde, así que realmente necesito ayuda aquí. Gracias.
Esto suena como un error de zona horaria. No creo que createXTimestamp esté haciendo lo correcto. Hay algunos errores de zona horaria allí, donde la precisión de la zona horaria se pierde y se reemplaza con la zona horaria local.
Además, dice "milisegundos desde la época": el .substring(0,10) está eliminando los milisegundos, y en el lado del nodo se divide por 1000 para obtener segundos también.
Si el objetivo es devolver segundos desde la época, no creo que necesite la variable de test en absoluto, y puede reemplazar toda esa función con lo siguiente:
static String createXTimestamp() { return DateTime.now().toUtc().millisecondsSinceEpoch.toString().substring(0, 10); }