簡體   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