Rails Action Cable:如何获取用户代理和客户端IP地址?
Rails Action Cable: How to fetch User Agent & Client IP Address?
我正在升级 Rails 应用程序以通过 Action Cable 使用 websocket。出于日志目的,我需要获取客户端的 IP 地址和发送套接字消息的用户代理。
在MyChannel
class(app/channels/my_channel.rb
)的speak
方法中,我无法访问会话或请求。
你知道我如何在这个 speak
方法中获取 user_agent
和客户端 IP 地址吗?
您可以从 Channel 所属的 Connection 对象中的请求中获取此信息。
ActionCable::Connection::Base
包含了当前连接环境的所有信息(HTTPheaders,rack进程等),可以通过它的env
属性reader.
例如,这是我如何获得在建立 WebSocket 连接时使用的 User-Agent HTTP header:
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-request)。您可以在控制台中通过 运行ning connection.env.keys
获取此散列包含的键的完整列表(显然,当 connection
实例可用时)。
要使用 remote_ip
助手,您可以在您的频道中执行此操作:
ActionDispatch::Request.new(connection.env).remote_ip
我正在升级 Rails 应用程序以通过 Action Cable 使用 websocket。出于日志目的,我需要获取客户端的 IP 地址和发送套接字消息的用户代理。
在MyChannel
class(app/channels/my_channel.rb
)的speak
方法中,我无法访问会话或请求。
你知道我如何在这个 speak
方法中获取 user_agent
和客户端 IP 地址吗?
您可以从 Channel 所属的 Connection 对象中的请求中获取此信息。
ActionCable::Connection::Base
包含了当前连接环境的所有信息(HTTPheaders,rack进程等),可以通过它的env
属性reader.
例如,这是我如何获得在建立 WebSocket 连接时使用的 User-Agent HTTP header:
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-request)。您可以在控制台中通过 运行ning connection.env.keys
获取此散列包含的键的完整列表(显然,当 connection
实例可用时)。
要使用 remote_ip
助手,您可以在您的频道中执行此操作:
ActionDispatch::Request.new(connection.env).remote_ip