tutorial react examples apps meteor

react - meteor tutorial



¿Cómo obtener la dirección IP del usuario en el servidor Meteor? (6)

Esta es una forma que me ha funcionado para obtener la dirección IP del cliente desde cualquier parte del servidor, sin usar paquetes adicionales. Trabajando en Meteor 0.7 y debería funcionar en versiones anteriores también.

En el cliente, obtenga la URL del socket (única) y envíela al servidor. Puede ver la URL del socket en la consola web (en Red en Chrome y Safari).

socket_url = Meteor.default_connection._stream.socket._transport.url Meteor.call(''clientIP'', socket_url)

Luego, en el servidor, use la URL del socket del cliente para encontrar su IP en Meteor.server.sessions .

sr = socket_url.split(''/'') socket_path = "/"+sr[sr.length-4]+"/"+sr[sr.length-3]+"/"+sr[sr.length-2]+"/"+sr[sr.length-1] _.each(_.values(Meteor.server.sessions), (session) -> if session.socket.url == socket_path user_ip = session.socket.remoteAddress )

user_ip ahora contiene la dirección IP del cliente conectado.

Me gustaría obtener la dirección IP del usuario en mi aplicación meteorológica, en el lado del servidor, para poder registrar la dirección IP con un montón de cosas (por ejemplo: usuarios no registrados suscribiéndose a una lista de correo o simplemente haciendo cualquier cosa) importante ).

Sé que la dirección IP ''vista'' por el servidor puede ser diferente a la dirección de origen real cuando hay proxies inversos involucrados. En tales situaciones, el encabezado X-Forwarded-For debe analizar para obtener la dirección IP pública real del usuario. Tenga en cuenta que el análisis X-Forwarded-For no debe ser automático (consulte http://www.openinfo.co.uk/apache/index.html para obtener una explicación de los posibles problemas de seguridad).

Referencia externa: esta pregunta surgió en la lista de distribución de meteoros en agosto de 2012 (no se ofreció ninguna solución).


Esta respuesta https://.com/a/22657421/2845061 ya hace un buen trabajo al mostrar cómo obtener la dirección IP del cliente.

Solo quiero señalar que si su aplicación se sirve detrás de servidores proxy (generalmente sucede), tendrá que establecer la variable de entorno HTTP_FORWARDED_COUNT con el número de proxies que está utilizando.

Ref: https://docs.meteor.com/api/connections.html#Meteor-onConnection


Puedes hacer esto en tu código de servidor:

Meteor.userIPMap = []; __meteor_bootstrap__.app.on("request", function(req, res) { var uid = Meteor.userId(); if (!uid) uid = "anonymous"; if (!_.any(Meteor.userIPMap, function(m) { m.userid === uid; })) { Meteor.userIPMap.push({userid: uid, ip: req.connection.remoteAddress }); } });

A continuación, tendrá un Meteor.userIPMap con un mapa de ID de usuario a direcciones IP (para acomodar el encabezado x-forward-for, use esta función dentro de la anterior).

Tres notas: (1) esto se activará cada vez que haya una solicitud en su aplicación, por lo que no estoy seguro del tipo de rendimiento que esto ocasionará; (2) el objeto __meteor_bootstrap__ se va a desaparecer pronto, creo que con un nuevo sistema de paquete renovado; y (3) el usuario anonymous necesita un mejor manejo aquí ... necesitará una forma de conectar un usuario anónimo a una IP mediante una restricción única y persistente en su objeto de solicitud.


Similar a la respuesta de TimDog, pero funciona con las versiones más nuevas de Meteor:

var Fiber = Npm.require(''fibers''); __meteor_bootstrap__.app .use(function(req, res, next) { Fiber(function () { console.info(req.connection.remoteAddress); next(); }).run(); });

Esto debe estar en su código de servidor de nivel superior (no en Meteor.startup)


Tienes que conectar las sesiones del servidor y tomar la ip del usuario actual:

Meteor.userIP = function(uid) { var k, ret, s, ss, _ref, _ref1, _ref2, _ref3; ret = {}; if (uid != null) { _ref = Meteor.default_server.sessions; for (k in _ref) { ss = _ref[k]; if (ss.userId === uid) { s = ss; } } if (s) { ret.forwardedFor = ( _ref1 = s.socket) != null ? ( _ref2 = _ref1.headers) != null ? _ref2[''x-forwarded-for''] : void 0 : void 0; ret.remoteAddress = ( _ref3 = s.socket) != null ? _ref3.remoteAddress : void 0; } } return ret.forwardedFor ? ret.forwardedFor : ret.remoteAddress; };

Por supuesto, necesitará que el usuario actual inicie sesión. Si lo necesita también para usuarios anónimos, siga esta publicación que escribí.

PD: Sé que es un hilo antiguo, pero carecía de una respuesta completa o tenía un código que ya no funciona.


1 - Sin una solicitud http, en las funciones debería poder obtener el IP de cliente con:

clientIP = this.connection.clientAddress; //EX: you declare a submitForm function with Meteor.methods and //you call it from the client with Meteor.call(). //In submitForm function you will have access to the client address as above

2 - Con una solicitud http y usando iron-router y su función Router.map:

En la función de acción del uso de la ruta seleccionada:

clientIp = this.request.connection.remoteAddress;

3 - usando la función Meteor.onConnection:

Meteor.onConnection(function(conn) { console.log(conn.clientAddress); });