2013-08-29 10 views
8

Questa sembra una domanda molto semplice che non ha una soluzione/risposta elegante.Come accedere all'indirizzo IP del cliente in Meteor?

Come posso accedere all'indirizzo IP (remoto) del client da (1) il server o (2) il client?

+0

Vedere: http://stackoverflow.com/questions/102605/can-i-lookup-the-ip-ad-ress-of-a-hostname-from-javascript –

+0

non ho idea di cosa sia o come si usi cgi-bin per questo scopo ...:/ – Chet

risposta

7

Come detto Florin, questo è tutto abbastanza molto integrato con Meteor ora, al contrario delle epoche buie in cui dovevamo farlo da soli. Tuttavia, l'ho ulteriormente racchiuso in un pacchetto che tiene traccia di tutte le connessioni aperte e consente di eseguire query per i relativi IP: https://github.com/mizzao/meteor-user-status. Fa anche un sacco di altre cose utili.

1

È possibile utilizzare questo pacchetto: https://github.com/gadicohen/meteor-headers. Ottiene le intestazioni sia sul client che sul server.

Se vuoi farlo senza un pacchetto, puoi "ispirare" te stesso dal codice qui sopra, la cosa da ricordare è che prima di 0.6.5 abbiamo usato il 'nascosto' __meteor_bootstrap__.app e il post 0.6.5 è raccomandato per utilizzare WebApp.connectHandler invece.

+1

Questa è una soluzione molto bella :) – Chet

+0

non ha funzionato abbastanza sul server - forse sto sbagliando: https://github.com/gadicohen/meteor-headers/ issues/2 – Chet

2

Sul client

headers = { 
    list: {}, 
    get: function(header, callback) { 
     return header ? this.list[header] : this.list; 
    } 
} 

Meteor.call('getReqHeaders', function(error, result) { 
    if (error) { 
     console.log(error); 
    } 
    else { 
     headers.list = result; 
    } 
}); 

Sul server:

headers = { 
    list: {}, 
    get: function(header) { 
     return header ? this.list[header] : this.list; 
    } 
}; 

var app = typeof WebApp != 'undefined' ? WebApp.connectHandlers : __meteor_bootstrap__.app; 
app.use(function(req, res, next) { 
    reqHeaders = req.headers; 
    return next(); 
}); 

Meteor.methods({ 
    'getReqHeader': function(header) { 
     return reqHeaders[header]; 
    }, 
    'getReqHeaders': function() { 
     return reqHeaders; 
    }, 
}); 
+1

Questo è obsoleto ora. L'IP del client è ora offerto tramite il nucleo 'clientAddress' - http://docs.meteor.com/#/full/meteor_onconnection –

14

Ottenere l'IP del client:

Senza una richiesta HTTP, nelle funzioni si dovrebbe essere in grado di ottenere il IP di client 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 

Con una richiesta HTTP e l'utilizzo di ferro-router e la sua funzione Router.map:

Nella funzione azione dell'uso percorso mirato:

clientIp = this.request.connection.remoteAddress; 
+0

Salut Florin, che ne dici di menzionare la domanda è un perfetto duplicato di [questo] (http://stackoverflow.com/questions/14843232/how-to-get-the-user-ip-address-in-meteor-server)? –

+1

Sono assolutamente d'accordo, in quel momento volevo inserire un commento con quello invece di rispondere ma non avevo abbastanza punti reputazione (postare un commento a domande/risposte che non ti appartenevano richiesto 50p o più) –

+0

Questo è disponibile solo dopo la versione 0.7.1.1 per coloro che hanno applicazioni in esecuzione su versioni precedenti, come me. – user2602152