该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? # generate simple key for test and development environments
('a' * 30) # should be at least 30 chars long
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
)。
Rails 框架中的三个核心特性使用了应用程序的key_generator
,因此:secret_key_base
- 派生可通过 访问的加密 cookie 的密钥
cookies.encrypted
。
- 派生 HMAC 签名 cookie 的密钥,可通过
cookies.signed
.
- Deriving keys for all of the
application’s named
message_verifier
instances.
Check out more on each of the three in the article by @michaeljcoyne.