This seems like a very basic question that doesn't have an elegant solution/answer out there.
How can I access the client (remote) IP address from (1) the server or (2) the client?
Getting the client IP:
Without a http request, in the functions you should be able to get the clientIP with:
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
With a http request and using iron-router and its Router.map function:
In the action function of the targeted route use:
clientIp = this.request.connection.remoteAddress;
As Florin mentioned, this is all pretty much integrated with Meteor now, as opposed to the dark ages when we had to do it ourselves. However, I've additionally wrapped it in a package that tracks all open connections and allows you to query for their IPs: https://github.com/mizzao/meteor-user-status. It also does a bunch of other useful stuff.
On client
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;
}
});
On server:
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;
},
});
You can use this package: https://github.com/gadicohen/meteor-headers. It gets headers on both client and server.
If you want to do it without a package, you can 'inspire' yourself from the code above, the thing to remember is that prior to 0.6.5 we used the 'hidden' __meteor_bootstrap__.app
and post 0.6.5 it's recommended to use WebApp.connectHandler
instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With