【问题标题】:Get client's ip at user creation in Meteor在 Meteor 中创建用户时获取客户端的 ip
【发布时间】:2014-03-13 11:38:02
【问题描述】:

我在 Meteor 中创建自定义登录/注册,因为我需要检查电子邮件格式,更重要的是在注册表单中添加一个 recaptcha,这需要客户的 ip。

所以我打算在Accounts.validateNewUser 中验证验证码,但我不知道如何在这里获取客户端的 ip。 我读了answer 来了解如何做到这一点,但这不是我想要的。我检查了 Meteor.default_server.sessions ,其中包含服务器上的所有会话/套接字。它们包含有关所有套接字的标头、ips 的信息。每个都有有趣的东西,比如:

pathname: "/sockjs/375/ibmrlwb2/xhr"
prefix: "/sockjs"
protocol: "xhr-polling"
remoteAddress: "127.0.0.1"
remotePort: 42009

但是在不知道当前是哪个socket的情况下,我无法确定当前请求的ip是哪个。

我如何知道当前对服务器的请求 url?有了它,我可以检查服务器上的所有套接字以推断客户端的 ip。

或者只是简单地如何在服务器上获取客户端的 ip?

【问题讨论】:

标签: meteor


【解决方案1】:

我是另一个答案中提到的user-status 包的维护者。

最近/即将推出的 Meteor 版本有 better support for managing connectionsbuilt-in support for grabbing IP addresses。结合 login hooks 今天刚刚合并到 devel 分支的事实,您应该能够直接处理这个问题,或者使用我们将添加到 user-status 包中的东西。

如果您有需要,请随时打开拉取请求。

【讨论】:

    【解决方案2】:

    可以使用user-status 包来获取客户端的IP。您可以使用包或查看代码,看看它是如何完成的。

    【讨论】:

    • 感谢您的回答。我查看了代码。实际上,在 Meteor.publishMeteor.method 上下文中,而不是在 Accounts.validateNewUser 中,我们可以获得当前用户的套接字信息(会话 ....)。如果我们检查套接字信息,我们将获得用户的 IP 地址。我采取的解决方案是:客户端必须提供套接字ID,然后在服务器端循环Meteor.default_server.stream_server.open_sockets 以获取正确的套接字并提取客户端的IP。这不是一个可靠的解决方案,但可以帮助我继续前进。
    • 我真的不知道coffeescript,但是有没有办法复制这个:@_session.socket.remoteAddress in Javascipt?
    • @Chet @ 只是表示'this',所以这就是this._session.socket.remoteAddress,它可能有相同的范围问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2015-06-06
    • 2020-11-10
    • 2018-02-13
    • 2011-02-24
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多