将 API 密钥存储到 credentials.yml.enc 的正确方法?

Posted

技术标签:

【中文标题】将 API 密钥存储到 credentials.yml.enc 的正确方法?【英文标题】:Correct way for Storing API keys to credentials.yml.enc? 【发布时间】:2019-03-30 14:50:11 【问题描述】:

我正在尝试为 Stripe Elements 存储我的 API 密钥。您可以在此处查看我之前的帖子:Using javascript for Stripe Elements

如您所见,Stripe 元素没有与 Stripe 中的 JS 或我的 stripejs.js 文件一起显示。

我假设它的 https://js.stripe.com/v3/ 由于我的 API 密钥存储不正确而没有以某种方式显示。我目前将我的 API 密钥存储在由 dotenv gem 管理的 .env 文件中

我正在尝试使用 credentials.yml.enc 存储我的 API 密钥,但不确定我是否正确。

我的工作:

在 CMD 中调用“EDITOR=atom rails credentials:edit”。 原子弹出。 我通过以下方式存储 API 密钥: PUBLISHABLE_KEY = pk_test_1111111111111111111 SECRET_KEY = sk_test_11111111111111111111

保存文件。 退出。

虽然,它不会工作。我没有正确存储它吗?做错了什么?

在我的初始化器下的 stripe.rb 文件中是:

Rails.configuration.stripe = 
  :publishable_key => ENV['PUBLISHABLE_KEY'],
  :secret_key      => ENV['SECRET_KEY']


Stripe.api_key = Rails.configuration.stripe[:secret_key]

编辑:

我的 stripe.rb 文件结构如下:

Rails.configuration.stripe = 
  :publishable_key => Rails.application.credentials.stripe[:publishable_key],
  :secret_key      => Rails.application.credentials.stripe[:secret_key]


Stripe.api_key = Rails.configuration.stripe[:secret_key]

然后像这样保存我的凭据文件:

stripe:   
    publishable_key: 123456789
    secret_key: 123456789

然后我在启动我的服务器时收到错误:

undefined method \credentials' for Rails:Module (NoMethodError)`

我做错了什么吗?

尝试:2:

我尝试在 stripe.rb 文件中做...

Rails.configuration.stripe = 
  Rails.application.credentials.stripe[:publishable_key],
  Rails.application.credentials.stripe[:secret_key]


Stripe.api_key = Rails.configuration.stripe[:secret_key]

最后一次有和没有......我收到错误:“语法错误,意外'',期待输入结束”

更新:

如果有人遇到类似问题...

对我来说,是引导程序导致了问题。您需要做的就是在 Stripe Elements 表单中使用 class="form-control" 以使其正确显示 - 如果您使用的是 Bootstrap。

【问题讨论】:

【参考方案1】:

您通过 Rails 5.1 的凭据读取的内容不存储在 ENV 变量中,而是通过 Rails 帮助程序。

像文件一样

aws:
  access_key_id: 123
  secret_access_key: 345
secret_key_base: 2fdea1259c6660852864f9726616df64c8cd

你可以这样访问它们。

Rails.application.credentials.aws[:access_key_id]     # => "123"
Rails.application.credentials.aws[:secret_access_key] # => "345"
Rails.application.credentials.secret_key_base         # => "2fdea..

【讨论】:

我更新了我的问题。我尝试了类似的东西。但不工作。我确实阅读了有关它的 Medium 博客,但我不明白我做错了什么。【参考方案2】:

从您写的内容看来,您在 Rails 5.2 中执行此操作

我可以通过将 stripe.rb 文件的最后一行更改为:

在我的应用程序中修复此 Rails 5.2
Stripe.api_key = Rails.application.credentials.stripe[:secret_key]

密钥存储在 credentials.yml.enc 文件中。

【讨论】:

以上是关于将 API 密钥存储到 credentials.yml.enc 的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章