10

这似乎是一个非常基本的问题,没有优雅的解决方案/答案。

如何从 (1) 服务器或 (2) 客户端访问客户端(远程)IP 地址?

4

4 回答 4

18

获取客户端IP:

如果没有 http 请求,在函数中您应该能够通过以下方式获取 clientIP:

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

使用 http 请求并使用 iron-router 及其 Router.map 函数:

在目标路由的动作函数中使用:

clientIp = this.request.connection.remoteAddress;
于 2014-03-26T09:53:28.823 回答
7

正如弗洛林所说,现在这一切都与 Meteor 集成在一起,而不是我们不得不自己做的黑暗时代。但是,我另外将它包装在一个包中,该包跟踪所有打开的连接并允许您查询他们的 IP:https ://github.com/mizzao/meteor-user-status 。它还做了很多其他有用的事情。

于 2014-06-05T12:30:03.447 回答
2

在客户端

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

在服务器上:

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;
    },
});
于 2013-09-03T08:07:53.233 回答
1

你可以使用这个包:https ://github.com/gadicohen/meteor-headers 。它在客户端和服务器上都获取标头。

如果你想在没有包的情况下这样做,你可以从上面的代码中“启发”自己,要记住的是,在 0.6.5 之前我们使用了“隐藏” __meteor_bootstrap__.app,而在 0.6.5 之后建议使用它WebApp.connectHandler

于 2013-08-29T14:03:52.547 回答