如何在路由中获取客户端 IP

Posted

技术标签:

【中文标题】如何在路由中获取客户端 IP【英文标题】:How to get the client IP inside a Route 【发布时间】:2020-09-27 10:08:27 【问题描述】:

我试图在 Iron Router 的路由过程中检索客户的 IP 地址。我有一个服务器端函数(getIP),但是路由内的“waitOn”函数不会等待服务器函数返回:

waitOn: function () 
        Meteor.call('getIP', function(error, clientIp)...

我可以强制它等待,还是可以通过其他方式获取 IP?

【问题讨论】:

【参考方案1】:

根据文档,waitOn 挂钩必须返回一个处理程序、一个函数或一个数组。它不适合您的原因是客户端上的 Meteor.call 始终是异步的,您必须定义一个回调函数,该函数在方法响应时调用。 鉴于这种性质,您只能使用 Meteor 方法,如果 waitOn 代码支持 Promise,则可以在方法回调中解决。

我看到的唯一方法是:

使用 Meteor.onConnection 挂钩,并将用户的当前 IP 地址存储在用户的配置文件中(Meteor.users 集合) 设置发布整个用户配置文件的全局订阅(因为默认情况下 Meteor.user 仅发布几个默认文档字段)。 在路由waitOn上,查询Meteor.user集合,你会看到当前检测到的那个用户的IP地址

我希望这对您有所帮助。

【讨论】:

以上是关于如何在路由中获取客户端 IP的主要内容,如果未能解决你的问题,请参考以下文章

请问 C# 如何获取外网IP?

外网如何获取内网的IP?

如何在路由器中设置客户端指定ip

Android如何获取到连接的WIFI无线路由器的所有客户端的MAC地址?

在我的网页中获取IP地址(192.168.X.X,由无线路由器分配)?

双路由双核心网络项目