将 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 的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

我应该将使用 Elastic Beanstalk 部署的 NodeJS 应用程序的 API 密钥存储在哪里?

将私有 api 密钥存储在颤振中

如何将地图 api 密钥存储在 local.properties 中并在 AndroidManifest.xml 中使用

在本地存储中存储会话密钥

当我推送到 GitHub 时如何处理秘密 API 密钥,以便在克隆存储库时我的项目仍然有效?

是否可以将 API 密钥和 .env 文件提交到私人业务仓库?