【问题标题】:Challenges accessing/working with Rails credentials访问/使用 Rails 凭据的挑战
【发布时间】:2021-11-12 17:04:59
【问题描述】:

我一直在尝试访问我在 Rails 加密凭据中设置的 API 密钥。我使用 Vim 将密钥添加到文件中,并仔细检查了它们是否正确保存。

我在config/environments 中的测试、开发和生产文件中添加了config.require_master_key = true

但是当我尝试使用其中一个 API 密钥时,它会返回 nil

我的凭据设置如下:

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 1234567890

stripe:
  development:
    stripe_public_key: pk_test_1234567890
    stripe_secret_key: sk_test_1234567890

stripe:
  test:
    stripe_public_key: pk_test_1234567890
    stripe_secret_key: sk_test_1234567890
stripe:
  production:
    stripe_public_key: pk_live_1234567890
    stripe_secret_key: sk_live_1234567890

然后在我想使用它的文件中 (new.html.erb) 我试图在脚本中访问凭据。

const stripe = Stripe("<%= Rails.application.credentials.stripe.stripe_public_key %>")

但它不返回任何东西。

在深入研究 Stack Overflow 和 Rails 文档后,我尝试了其他几个版本/语法,但还没有任何工作。

也试过const stripe = Stripe("<%= Rails.application.credentials.stripe[Rails.env.to_sym][:stripe_public_key] %>"),但也没有运气。

当我运行服务器并在 Chrome 开发工具中查看脚本时,它只显示为 const stripe = Stripe("")

值得注意的是,当我运行rails credentials:show 时,凭据会正确打印到终端,因此它们确实存在。我一定只是错误地访问了它们。

【问题讨论】:

  • 您在使用Rails.application.credentials.config 时能看到您的凭据吗?我的猜测是你必须使用 Rails.application.credentials.stripe[:stripe_public_key] 或与 env Rails.application.credentials[Rails.env.to_sym][:stripe][:stripe_public_key] 因为环境是第一位的......
  • Rails.application.credentials 是用于调试以检查您的密钥是否正确加载的 Rails 控制台......它不应该在视图中使用。此外,您应该直接在 rails 控制台或终端中进行调试,而不是通过js > html > erb > rails > ruby
  • 这会在 Rails 控制台Rails.application.credentials[:stripe][Rails.env.to_sym][:stripe_public_key] 中产生任何东西吗?
  • Rails.application.credentials[:stripe][Rails.env.to_sym] ?如果返回错误...Rails.application.credentials[:stripe] 怎么样?
  • 啊,好吧...它只有本地机器上的生产密钥?因为这就是为什么Rails.application.credentials[:stripe][Rails.env.to_sym] 失败的原因,因为Rails.env.to_sym 肯定会返回:development,这是您凭据中不存在的密钥...

标签: ruby-on-rails ruby environment-variables


【解决方案1】:

正如@DennyMueller 在 cmets 中指出的那样,问题在于文件中的“条带”键被覆盖,并且只有最后一个键最终存在于配置中。

无论如何,指出这不是 Rails 期望管理依赖于环境的凭据的方式是有用的。相反,您应该有单独的文件 config/credentials/development.yml.encconfig/credentials/test.yml.enc,它们是通过运行生成的

rails credentials:edit --environment development
rails credentials:edit --environment test

因此,每个凭据文件都不应该将环境名称作为密钥。

【讨论】:

  • 谢谢,这也很有帮助!我已按照您的建议将我的每个凭据拆分到单独的环境中,现在一切运行顺利。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
相关资源
最近更新 更多