2013-06-28 77 views
4

我似乎無法在文檔中的任何位置找到此文件,而且google上的所有信息都是一個相當不完整的計算器文章。我有一個geoip應用程序,我需要訪問者的IP地址。未登錄用戶,所有訪問者。Meteorjs:獲取訪客的IP地址

任何想法你如何做到這一點與流星?

更新:更多的搜索後,我發現這個代碼,似乎工作至今:

var Fiber = Npm.require('fibers'); 

__meteor_bootstrap__.app.use(function(req, res, next) { 
    Fiber(function() { 
     console.info(req.connection.remoteAddress); 
     console.log(req); 
     next(); 
    }).run(); 
}); 

但有一個問題。我無法將IP地址與訪問者本身鏈接起來,因爲我無法發送cookie或將會話數據從服務器設置到客戶端,就像我通常在PHP/Python/Ruby中執行的那樣。

我得到了完整的請求與它的標題,但沒有訪客會話ID或東西從人羣中挑出這個用戶。

想想您需要向英國所有用戶發送聊天邀請的應用程序。您首先需要將他與他聯繫,然後發送邀請函,如果一切正常。所以我需要這個來回。

+0

一種副本:http://stackoverflow.com/questions/14755563/meteor-js-get-anonymous-visitors-unique-id-ip-whatever –

+0

這不工作了。 'console.log(Meteor.default_server.sessions);'不返回任何東西。 –

+0

我沒有說它有效,只是它有點複製。 –

回答

-2

好吧,這是我的工作方式。它不漂亮,但它的工作原理。當客戶打開你的網頁,你必須調用服務器方法儘快:

Meteor.call("get_visitor_ip"); 

然後在服務器上你有方法:

Meteor.methods({ 
    ... 
    "get_visitor_ip": function() { 
     this.setUserId(this.userId ? this.userId : new Meteor.Collection.ObjectID()._str); 
     var user_ip = get_visitor_ip(this.userId); 
        // Do whatever you need with it 
    } 
    ... 
}); 

get_visitor_ip = 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; 
}; 
+0

我無法篩選此代碼,以找出當用戶匿名時我只需要獲取IP地址。 – Chet

+0

這看起來像編譯後的coffeescript,它比普通的coffeescript更難閱讀。 –