簡體   English   中英

Rails Action Cable:如何獲取用戶代理和客戶端 IP 地址?

[英]Rails Action Cable: How to fetch User Agent & Client IP Address?

我正在升級 Rails 應用程序以通過 Action Cable 使用 websocket。 出於日志記錄的目的,我需要獲取客戶端的 IP 地址和發送套接字消息的用戶代理。

MyChannel類( app/channels/my_channel.rb )的speak方法中,我無法訪問會話或請求。

您對我如何在此speak方法中獲取user_agent和客戶端 IP 地址有任何想法嗎?

您可以從 Channel 所屬的 Connection 對象中的請求中獲取此信息。

ActionCable::Connection::Base包含有關當前連接環境的所有信息(HTTP 標頭、機架進程等),您可以通過其env屬性讀取器訪問它。

例如,這里是我如何獲取在建立 WebSocket 連接時使用的User-Agent HTTP 標頭:

user_agent = connection.env["HTTP_USER_AGENT"]

請注意,我從ApplicationCable::Channel實例運行此代碼,其中連接實例可通過connection屬性獲得

我找不到任何關於它的文檔,但我相信它是安全的,因為env屬性是公開可用的( https://api.rubyonrails.org/v5.1.6/classes/ActionCable/Connection/Base.html#method-i -請求)。 您可以通過在控制台中運行connection.env.keys來獲取此哈希包含的鍵的完整列表(顯然,當connection實例可用時)。

要使用remote_ip助手,您可以在您的頻道中執行此操作:

ActionDispatch::Request.new(connection.env).remote_ip

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM