繁体   English   中英

如何在 Nuxt 的 asyncData 方法中获取用户的 IP?

[英]How do I get the IP of a user in Nuxt's asyncData method?

Nuxt 使用 asyncData 在服务器端运行代码,然后将其与数据对象合并。

我想拨打电话,要求我知道用户的 IP。 我看到我可以找到确实拥有它req对象,但它深埋在那里,我担心这不是一种可靠的方法。

如何在服务器端而不是客户端访问主叫用户的 IP 地址?

如果nuxt在nginx等代理后面运行,那么你可以通过读取x-real-ip或x-forwarded-for在asyncData中获取客户端的IP地址。 请注意,如果调用已通过其他代理(如果有多个条目,则客户端是第一个),则 x-forwarded-for 可以包含逗号分隔的 IP。

确保在您的 nginx 站点配置中设置标头

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

然后您可以读取 asyncData 中的标头:

  async asyncData(context) {
    if (process.server) {
      const req = context.req
      const headers = (req && req.headers) ? Object.assign({}, req.headers) : {}
      const xForwardedFor = headers['x-forwarded-for']      
      const xRealIp = headers['x-real-ip']
      console.log(xForwardedFor)
      console.log(xRealIp)
    }
  }

有一个关于此的 github 线程,这使得在两种环境(本地,生产)中获取 IP 变得微不足道

const ip = req.connection.remoteAddress || req.socket.remoteAddress

但请注意,您需要确保正确转发代理标头。 因为 nuxt 在传统的 Web 服务器后面运行,无需转发代理标头,您将始终获得 Web 服务器的本地 IP(127.0.0.1,除非环回已更改)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM