2013-06-28 38 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更难阅读。 –