Estoy tratando de implementar una función como la que ofrece Instagram; Estoy hablando de su página de "actividad de inicio de sesión". Esto es de lo que hablo:
Cada vez que el usuario inicia sesión, el dispositivo en uso se almacena actualmente en la página. ¿Cómo haría eso?
El código actual que tengo usa dos bibliotecas, una para encontrar ip.address() del dispositivo que se está usando y una segunda que se supone que me ayudará a obtener los datos de ubicación relacionados con la dirección IP dada. Lamentablemente, no puedo hacer que funcione. Así es como se ve el código:
const ipLocation = require('ip-to-location') const ip = require('ip') const loc = await ipLocation.fetch(ip.address()) console.dir('Location', loc) await User.findOneAndUpdate( { email: req.body.email }, { $push: { loginActivity: { type: 'Point', coordinates: [loc.longitude, loc.latitude], // formattedAddress: loc[0].formattedAddress, // street: loc[0].streetName, city: loc.city.city, state: loc.region_name, zipcode: loc.zip_code, country: loc.country_code, }, }, } )
¿Hay alguna biblioteca alternativa para usar? o alguien me puede señalar en la dirección correcta para hacer esto posible?
Bueno, si puede obtener la dirección IP de un usuario, puede probar ipgeolocation.io
Esta es una API gratuita que puede brindarle el valor de latitud y longitud de una dirección IP (y mucho más si lo necesita).
Más en documentación
Puede probar IP2Location Node.js.
https://github.com/ip2ubicación/ip2ubicación-nodejs
Puede llamar a un archivo de base de datos ( gratis o de pago ) o llamar a un servicio web .
Para la base de datos, el código se verá similar al siguiente:
const {IP2Location} = require("ip2location-nodejs"); let ip2location = new IP2Location(); ip2location.open("./DB25.BIN"); testip = ['8.8.8.8', '2404:6800:4001:c01::67']; for (var x = 0; x < testip.length; x++) { result = ip2location.getAll(testip[x]); for (var key in result) { console.log(key + ": " + result[key]); } console.log("--------------------------------------------------------------"); } ip2location.close();
Para el servicio web, puede usar el siguiente ejemplo:
const {IP2LocationWebService} = require("ip2location-nodejs"); let ws = new IP2LocationWebService(); let ip = "8.8.8.8"; let apiKey = "YOUR_API_KEY"; let apiPackage = "WS25"; let useSSL = true; // addon and lang to get more data and translation (leave both blank if you don't need them) let addon = "continent,country,region,city,geotargeting,country_groupings,time_zone_info"; let lang = "fr"; ws.open(apiKey, apiPackage, useSSL); ws.lookup(ip, addon, lang, (err, data) => { if (!err) { console.log(data); ws.getCredit((err, data) => { if (!err) { console.log(data); } }); } });