该secret_token.rb
文件的内容包括一个较长的随机字符串,该字符串用于验证已签名Cookie的完整性(例如,人们登录您的Web应用程序时的用户会话)。
文档说:
使用secret_token.rb
初始化程序中现有的secret_key_base可以为在生产模式下运行Rails应用程序的任何用户设置SECRET_KEY_BASE环境变量。或者,您可以简单地将现有的secret_key_base从secret_token.rb
初始化程序复制到生产部分下的secrets.yml中,替换为<%= ENV["SECRET_KEY_BASE"] %>
。
由于它是重要文件,并且不能将其放入.gitignore,因此使用env变量存储secret_key_base
值被视为一种好习惯:
创建.env
或.powenv
归档并将其存储为:
export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"
然后在 config/initializers/secret_token.rb
YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test?
('a' * 30)
else
ENV['SECRET_TOKEN']
end
本文 (有点旧)很长,但实际上充满了有关该主题的有用信息。
更新04.05.15
从Rails 4.2开始,不再有secret_token.rb
文件。按照新的约定,有一个config/secrets.yml
文件旨在存储应用程序的机密。
阅读有关如何根据创新将现有应用程序升级到4.2.x的内容。
从技术上讲,其目的secrect_key_base
是成为应用程序key_generator
方法的秘密输入(检查Rails.application.key_generator
)。
该应用程序的key_generator
,因此secret_key_base
,被Rails框架中的三个核心功能所使用:
- 可通过访问的加密cookie的派生密钥
cookies.encrypted
。
- 派生HMAC签名的cookie的密钥,该密钥可通过访问
cookies.signed
。
- 导出所有应用程序命名
message_verifier
实例的密钥。
在@michaeljcoyne的文章中查看更多关于这三个方面的信息。
secret_key_base
仍在使用,但存储在其中config/credentials.yml.enc
。该文件已加密。您可以在此处找到有关新凭证系统的更多信息,或运行rails credentials:help
。