如何在开发模式下访问加密凭证?

How do I access the encrypted credentials in development mode?

我在控制器中有这段代码

def index
  puts Rails.application.credentials.admin_email
  if (current_admin && current_admin.email == Rails.application.credentials.admin_email)
    #do this
  else
    #do that
  end
end 

else 分支总是发生。我相信这是因为我没有从加密文件中取回字符串,因为 puts 行从不打印任何内容。

当我在 rails 控制台中键入 Rails.application.credentials.admin_email 时,我得到了正确的响应,"xxx@xxx.com"

我的 config/credentials.yml.enc 文件如下所示:

admin_email: xxx@xxx.com

我还尝试将 config/credentials.yml.enc 文件更改为:

development:
  admin_email: xxx@xxx.com

并将代码更改为

puts Rails.application.credentials[:admin_email]
if (current_admin && current_admin.email == Rails.application.credentials[:admin_email]

然后在 rails 控制台中,我使用

得到正确的 xxx@xxx.com
Rails.application.credentials[:development][:admin_email]

,但是当 运行 rails s.

时,开发代码仍然没有显示任何内容

这是获取环境特定凭据的正确方法,这就是您使用以下代码获取凭据的原因:-

Rails.application.credentials.admin_email

更多请点击这里 https://github.com/rails/rails/issues/31349

https://github.com/rails/rails/pull/30067

看起来您可能有打字错误/复制粘贴错误。

如果您还有这种格式的凭据文件:

development:
  admin_email: xxx@xxx.com

那么您应该使用

访问它
Rails.application.credentials.development[:admin_email]

在你的问题中,虽然在 "And have changed the code to be" 下你仍然有旧版本:

puts Rails.application.credentials[:admin_email]
if (current_admin && current_admin.email == Rails.application.credentials[:admin_email]

这应该是:

puts Rails.application.credentials.development[:admin_email]
if (current_admin && current_admin.email == Rails.application.credentials.development[:admin_email]