Как получить доступ к IP-адресу клиента в Meteor?
Это кажется очень простым вопросом, у которого нет элегантного решения / ответа.
Как я могу получить доступ к клиентскому (удаленному) IP-адресу с (1) сервера или (2) клиента?
4 ответа
Как отметил Флорин, все это в значительной степени интегрировано с Meteor, в отличие от темных веков, когда нам приходилось делать это самим. Тем не менее, я дополнительно упаковал его в пакет, который отслеживает все открытые соединения и позволяет запрашивать их IP-адреса: https://github.com/mizzao/meteor-user-status. Это также делает кучу других полезных вещей.
Получение клиентского IP:
Без http-запроса в функциях вы сможете получить client IP с:
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;
На клиенте
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;
},
});
Вы можете использовать этот пакет: https://github.com/gadicohen/meteor-headers. Он получает заголовки как на клиенте, так и на сервере.
Если вы хотите сделать это без пакета, вы можете "вдохновиться" из приведенного выше кода, но помните, что до 0.6.5 мы использовали "скрытый" __meteor_bootstrap__.app
и пост 0.6.5 рекомендуется использовать WebApp.connectHandler
вместо.