【发布时间】: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]或与 envRails.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