[英]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.