我正在升级Rails应用程序以通过Action Cable使用websocket。为了进行记录,我需要获取客户端的IP地址和发送套接字消息的用户代理。
在speak
类(MyChannel
)的app/channels/my_channel.rb
方法中,我无法访问会话或请求。
您是否知道如何通过这种user_agent
方法获取speak
和客户端IP地址?
答案 0 :(得分:1)
您可以从Channel所属的Connection对象的请求中获取此信息。
答案 1 :(得分:0)
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-request)。您可以通过在控制台中运行connection.env.keys
(显然,当connection
实例可用时)来获得此哈希包含的键的完整列表。
答案 2 :(得分:0)
要使用remote_ip
助手,您可以在自己的频道中执行以下操作:
ActionDispatch::Request.new(connection.env).remote_ip