我正在做一个宝石包装一个API该服务需要一些登录参数,因此我创建了一个连接类,通过传入所有登录值并与实例变量一起存储来进行初始化其中一个值,@secret_access_key显然是秘密的它在应用程序中不可读。但是在irb中测试gem时,我看到当返回对象时,密钥和所有其他实例变量一起显示。

mws = MWS::Connection.new :access_key => '1', :secret_access_key => 'SECRET!!!', :merchant_id => '3', :marketplace_id => '4'
 => #<MWS::Connection:0x007fbd22acef40 @access_key="1", @merchant_id="3", @marketplace_id="4", @secret_access_key="SECRET!!!">

我偏执于密钥会出现在Heroku日志、应用程序错误消息或其他任何东西中。
我应该担心吗如果是,存储或隐藏这些信息的最佳方法是什么?
另外,我正在使用httparty gem来管理这个,有没有更好的方法来处理这个gem?

最佳答案

您可以使用此解决方案:

class MWS::Connection
  def inspect
    "#<MWS::Connection:#{object_id}>"
  end
end

当然,密钥仍然可以访问,但现在不应该出现在任何日志中:
mws = MWS::Connection.new :access_key => '1', :secret_access_key => 'SECRET!!!', :merchant_id => '3', :marketplace_id => '4'
# => #<MWS::Connection:0x007fbd22acef40>
mws.instance_variable_get(:@secret_access_key) # => 'SECRET!!!'

09-30 15:31