Rails操作电缆:如何获取用户代理和客户端IP地址?

时间:2018-10-10 06:49:40

标签: ruby-on-rails ruby-on-rails-5 actioncable

我正在升级Rails应用程序以通过Action Cable使用websocket。为了进行记录,我需要获取客户端的IP地址和发送套接字消息的用户代理。

speak类(MyChannel)的app/channels/my_channel.rb方法中,我无法访问会话或请求。

您是否知道如何通过这种user_agent方法获取speak和客户端IP地址?

3 个答案:

答案 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