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

时间:2019-05-30 00:30:34

标签: ruby-on-rails ruby-on-rails-5.2

我在控制器中有此代码

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时,开发代码仍然没有显示任何内容。

2 个答案:

答案 0 :(得分:1)

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

如果您仍然具有以下格式的凭据文件:

development:
  admin_email: xxx@xxx.com

然后您应该使用

进行访问
Rails.application.credentials.development[:admin_email]

在您的问题中,尽管在“并将代码更改为”下,您仍然使用旧版本:

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]

答案 1 :(得分:0)

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

Rails.application.credentials.admin_email

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

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