Как получить доступ к 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 вместо.

Другие вопросы по тегам