ruby-on-rails - 访问/使用 Rails 凭据的挑战
问题描述
我一直在尝试访问我在 Rails 加密凭据中设置的 API 密钥。我使用 Vim 将密钥添加到文件中,并仔细检查了它们是否正确保存。
我添加config.require_master_key = true
到我的测试、开发和生产文件中config/environments
。
但是当我尝试使用其中一个 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
,凭据会正确打印到终端,因此它们确实存在。我一定只是错误地访问它们。
解决方案
正如@DennyMueller 在评论中指出的那样,问题在于文件中的“条纹”键被覆盖了,只有最后一个键最终存在于配置中。
无论如何,指出这不是 Rails 期望管理依赖于环境的凭据的方式是有用的。相反,您应该有单独的文件config/credentials/development.yml.enc
和config/credentials/test.yml.enc
,它们是通过运行生成的
rails credentials:edit --environment development
rails credentials:edit --environment test
因此,每个凭证文件都不应该将环境名称作为内部任何地方的键。
推荐阅读
- postgresql - 如何从 .bat 文件在 heroku 上的远程 postgres 数据库上运行代码
- r - 代码优化——data.table,当前for循环多引用优化成data.table
- ionic-framework - 离子:如何修复 UnhandledPromiseRejectionWarning?
- mule - Mule 4 中的批处理
- jquery - jQuery - 如果 div 重叠调整 css 顶部值
- python - 在python中的指定html块之间提取文本
- testng - KotlinTest 是否也支持 TestNG?
- sequence - odoo 10 中的测序
- angular - 如何删除下划线并在有角材料组件周围提供一个框?
- openxlsx - 防止 writeDataTable (openxlsx) 写入任何列名