瀏覽代碼

Get `client_ip` from `asgi.scope` (#2808)

* Get `client_ip` from `asgi.scope`

It seems like REMOTE_ADDR is always 127.0.0.1, which is not super useful when
trying to figure out where the websocket connection is originating from.

Of course this isn't a silver bullet because most-likely the WS will be passed
through a reverse proxy anyway... in that case, the client IP is likely in the
headers under `x_forwarded_for`

* client_ip: fallback to REMOTE_ADDR
Masen Furer 1 年之前
父節點
當前提交
fb2c3606d9
共有 1 個文件被更改,包括 4 次插入1 次删除
  1. 4 1
      reflex/app.py

+ 4 - 1
reflex/app.py

@@ -1211,7 +1211,10 @@ class EventNamespace(AsyncNamespace):
         }
 
         # Get the client IP
-        client_ip = environ["REMOTE_ADDR"]
+        try:
+            client_ip = environ["asgi.scope"]["client"][0]
+        except (KeyError, IndexError):
+            client_ip = environ.get("REMOTE_ADDR", "0.0.0.0")
 
         # Process the events.
         async for update in process(self.app, event, sid, headers, client_ip):