Comment obtenir l'adresse IP de l'utilisateur dans le Météore de serveur?
Je voudrais obtenir l'adresse IP de l'utilisateur dans mon application meteor, sur le côté serveur, de sorte que je peux me connecter à l'adresse IP avec un tas de choses (par exemple: les utilisateurs non enregistrés l'abonnement à une liste de diffusion, ou tout simplement faire quelque chose de important).
Je sais que l'adresse IP de " vu " par le serveur peut être différente de la véritable adresse de la source quand il y a des proxys inverses impliqués. Dans de telles situations, X-Forwarded-For
l'en-tête doit être analysée pour obtenir la véritable adresse IP publique de l'utilisateur. Notez que l'analyse X-Forwarded-For
ne doit pas être automatique (voir http://www.openinfo.co.uk/apache/index.html pour une discussion de problèmes potentiels de sécurité).
Référence externe: Cette question est venue sur le meteor-talk liste de diffusion en août 2012 (pas de solution).
- La réponse canonique est de l'utilisation de l'utilisateur statut de paquet.
Vous devez vous connecter pour publier un commentaire.
1 - Sans une requête http, dans les fonctions que vous devriez être en mesure d'obtenir la clientIP avec:
2 - Avec une requête http et de l'utilisation du fer-routeur et son Routeur.la carte fonction:
Dans l'action en fonction de l'itinéraire:
3 - à l'aide d'un Météore.onConnection fonction:
this.connection.httpHeaders['x-real-ip']
ou ce que les en-têtes de votre proxy ajoute à vos paquets. Cela fonctionne pour moi, derrièrenginx
clientAddress
docs.meteor.com/#/full/meteor_onconnectionproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
dans ma config nginx souslocation / {
et aussiprocess.env.HTTP_FORWARDED_COUNT = 2;
comme un Météore de la valeur d'environnement, au lieu de 1 comme indiqué dans le Meteor docs. J'ai aussi eu un peu de chance avec cetteMeteor.onConnection(function(conn) { var forwardedFor = conn.httpHeaders['x-forwarded-for'].split(","); console.log(forwardedFor[0]); });
Similaire à la TimDog réponse, mais fonctionne avec les versions plus récentes de Meteor:
Ce doit être dans votre top-niveau code serveur (pas dans le Météore.de démarrage)
Cette réponse https://stackoverflow.com/a/22657421/2845061 déjà fait un bon travail de montrer comment obtenir l'adresse IP du client.
Je veux juste noter que si votre application est servi derrière des serveurs proxy (arrive souvent), vous devez définir le
HTTP_FORWARDED_COUNT
variable d'environnement pour le nombre de procurations que vous utilisez.Ref: https://docs.meteor.com/api/connections.html#Meteor-onConnection
Vous pouvez le faire dans votre code serveur:
Vous aurez alors un Météore.userIPMap avec une carte des identifiants et des adresses ip (pour accueillir les x-forwarded-for-tête, utiliser cette fonction à l'intérieur de la ci-dessus).
Trois notes: (1) le présent se déclenche chaque fois qu'il y a une demande dans votre application, donc je ne suis pas sûr de ce genre de performances ce sera la cause; (2) la
__meteor_bootstrap__
objet s'en va bientôt, je pense qu'avec un prochain remanié système de paquets; et (3) laanonymous
les besoins de l'utilisateur une meilleure manipulation ici..vous aurez besoin d'un moyen de joindre un utilisateur anonyme de une IP unique, la persistance de contrainte dans leur demande d'objet.Vous avez à accrocher dans le serveur de sessions et de saisir l'adresse ip de l'utilisateur actuel:
Bien sûr, vous aurez besoin de l'utilisateur actuel pour être connecté. Si vous en avez besoin pour les utilisateurs anonymes ainsi suivre ce post j'ai écrit.
P. S. je sais que c'est un vieux thread mais il manquait une réponse complète ou avait un code qui ne fonctionne plus.
Voici une manière qui a travaillé pour moi d'obtenir l'adresse IP d'un client à partir de n'importe où sur le serveur, sans l'aide de paquets supplémentaires. De travail dans le Météore de 0,7 et devrait fonctionner dans les versions antérieures.
Sur le client, d'obtenir la prise URL (unique) et de l'envoyer au serveur. Vous pouvez consulter le support de l'URL dans la console web (sous Réseau dans Chrome et Safari).
Ensuite, sur le serveur, utilisez le client de la prise URL afin de trouver la propriété intellectuelle de leurs
Meteor.server.sessions
.user_ip
contient maintenant connecté à l'adresse IP du client.Meteor.server.sessions
pour la bonne SockJS URL envoyé par le client. (SockJS Url sont uniques, par exemple/sockjs/580/uqafmf0o
). Si vous ne trouvez pas l'URL envoyé par le client, vous savez qu'ils font semblant d'être malades, de sorte que vous renvoyer une erreur. Pas sûr de ce que vous voulez dire par votre commentaire ci-dessus, mais le client n'envoie pas le serveur de leur propriété intellectuelle dans le code ci-dessus.