2013-08-29 21 views
8

To wydaje się bardzo podstawowe pytanie, które nie ma eleganckiego rozwiązania/odpowiedzi.Jak uzyskać dostęp do adresu IP klienta w Meteor?

Jak uzyskać dostęp do klienta (zdalnego) adresu IP z (1) serwera lub (2) klienta?

+0

Zobacz: http://stackoverflow.com/questions/102605/can-i-look-the-ip-address-of-a-hostname- from-javascript –

+0

Nie mam pojęcia, co to jest cgi-bin i jak używać w tym celu ...:/ – Chet

Odpowiedz

7

Jak wspomniano Florin, to wszystko jest dość w dużym stopniu zintegrowane z Meteorem, w przeciwieństwie do ciemnych wieków, kiedy musieliśmy sami to zrobić. Jednak dodatkowo zapakowałem go w pakiet, który śledzi wszystkie otwarte połączenia i pozwala na zapytanie o ich adresy IP: https://github.com/mizzao/meteor-user-status. Wykonuje również szereg innych użytecznych rzeczy.

1

Możesz użyć tego pakietu: https://github.com/gadicohen/meteor-headers. Otrzymuje nagłówki zarówno na kliencie, jak i na serwerze.

Jeśli chcesz zrobić to bez paczki, możesz "zainspirować" się samym kodem powyżej, należy pamiętać, że przed 0.6.5 użyliśmy "ukrytego" __meteor_bootstrap__.app i postu 0.6.5 jest to zalecane zamiast tego użyć WebApp.connectHandler.

+1

To bardzo dobre rozwiązanie :) – Chet

+0

nie działało na serwerze - może robię to źle: https://github.com/gadicohen/meteor-headers/ issues/2 – Chet

2

Na kliencie

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; 
    } 
}); 

na serwerze:

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

To już jest przestarzałe. Adres IP klienta jest teraz oferowany przez rdzeń 'clientAddress' - http://docs.meteor.com/#/full/meteor_onconnection –

14

Getting IP klient:

Bez żądania HTTP, w funkcji powinien być w stanie uzyskać clientIP z :

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 

z żądaniem HTTP i przy użyciu żelaza routera i jego Router.map funkcję:

w funkcji działania ukierunkowanego wykorzystania szlaku:

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

Salut Florin, jak wspomnieć o tym pytaniu jest doskonałym duplikatem [tego] (http: // /stackoverflow.com/questions/14843232/how-to-get-the-user-ip-address-in-meteor-server)? –

+1

Całkowicie się zgadzam, w tym czasie chciałem umieścić komentarz z tym zamiast odpowiadać, ale nie miałem wystarczająco punktów reputacyjnych (umieszczenie komentarza na pytania/odpowiedzi, które nie należą do ciebie wymagane 50p lub więcej) –

+0

To jest dostępna tylko po wersji 0.7.1.1 dla tych, którzy mają aplikacje działające w starszych wersjach, tak jak ja. – user2602152