Heroku配置密钥基本错误

tom*_*456 25 ruby-on-rails heroku

刚刚使用Git将我的第一个应用程序推送到Heroku,并立即得到了一个Interanl服务器错误.

您必须在应用程序的配置中设置config.secret_key_base.

这是因为在我的.gitignore文件中包含以下文件:

配置/初始化/ secret_token.rb

我在我的.gitignore文件中使用了一个标准模板:https://github.com/github/gitignore/blob/master/Rails.gitignore

我的问题:我是否应该通过Heroku直接设置此密钥以增加安全性,如果是这样的话?

要么

我应该从我的.gitignore文件中删除这一行吗?

nmo*_*ott 32

除了在Heroku上将秘密令牌设置为ENV变量之外,如Nick Ginanto所述,您还需要以下内容才能完成这项工作.

取出config/initializers/secret_token.rb.gitignore

将此文件中的行更改为:

MyApp::Application.config.secret_token = ENV['SECRET_TOKEN']
Run Code Online (Sandbox Code Playgroud)

然后,这将获取您使用Heroku的配置变量设置的秘密令牌.

为了在本地环境中拾取令牌,您需要添加它.这里有很多选项,但最接近Heroku的选项是使用foreman gem.env项目根目录中的文件.在.env将需要有secret_token

SECRET_TOKEN=NKUd7gisd7fueAISDfg....
Run Code Online (Sandbox Code Playgroud)

您可以使用该rake secret命令生成令牌.确保您的.env文件已添加到.gitignore.

有了这一切,您将拥有Heroku和本地的不同令牌,您的令牌将不在您的源代码管理中.

  • 这里是heroku配置变量的链接:https://devcenter.heroku.com/articles/config-vars (2认同)

sup*_*ary 10

将其设置为Heroku环境变量,并为开发提供后备

删除硬编码的秘密,将秘密初始化程序检查到版本控制中,在Heroku上设置环境变量,并为开发和阶段提供后备.

1.删​​除硬编码的秘密,并可选择提供后备:

编辑config/initializers/secure_random.rb以删除生产的硬编码密钥.如果您不想更改启动服务器的方式,可以选择包括非生产环境的后备.

secret = Rails.env.production? ? ENV['SECRET_TOKEN'] : "top_secret_token"
YourApp::Application.config.secret_key_base = secret
Run Code Online (Sandbox Code Playgroud)

2.将config/initializers/secure_random.rb检查为git

编辑.gitignore并删除该行:

config/initializers/secret_token.rb
Run Code Online (Sandbox Code Playgroud)

现在提交文件.

3.设置Heroku的密钥

跑:

rake secret
Run Code Online (Sandbox Code Playgroud)

生成随机字母数字字符串.我想通过手动混合密钥来加倍确定,以防密钥生成算法中发现未来的弱点,就像不久前Debian所发生的那样.可能这是不必要的.

下次运行:

heroku config:set SECRET_TOKEN=paste_random_string_here
Run Code Online (Sandbox Code Playgroud)

将秘密设置为Heroku环境变量.部署到Heroku,你就完成了.


Nic*_*nto 5

最好使用ENV变量.

这样,您可以根据需要快速使所有cookie无效,每个环境都有一个单独的秘密,无需以特殊方式处理该文件

heroku config:set SECRET_TOKEN=ertbs45tnsb3aw5bsxdrt54...
Run Code Online (Sandbox Code Playgroud)

如果您复制了应用程序或在heroku中设置了另一个应用程序,则每个应用程序都将拥有自己的secret_token.在本地机器上只需设置相同的变量

  • 你应该使用rake secret生成SECRET_TOKEN:`heroku config:set SECRET_TOKEN = $(rake secret)` (4认同)