繁体   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