secret_token.rb 文件的内容包含一个长随机字符串用于验证签名 cookie 的完整性(例如,当人们登录您的网站时的用户会话应用程序)。
Documentation 说:
使用来自 secret_token.rb 初始化程序的现有 secret_key_base
为任何用户设置 SECRET_KEY_BASE 环境变量
在生产模式下运行 Rails 应用程序。或者,您可以简单地将现有的 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
This article(有点陈旧并且)很长,但确实包含有关该主题的有用信息。
更新 04.05.15
从 Rails 4.2 开始,不再有 secret_token.rb 文件。
按照新约定,有一个 config/secrets.yml 文件旨在存储应用程序的机密。
Have a read 讲述如何根据创新将现有应用升级到 4.2.x。
从技术上讲,secrect_key_base 的目的是作为应用程序 key_generator 方法的秘密输入(检查 Rails.application.key_generator)。
应用程序的 key_generator 和 secret_key_base 被 Rails 框架内的三个核心功能使用:
- 为可通过以下方式访问的加密 cookie 派生密钥
cookies.encrypted。
- 为 HMAC 签名的 cookie 派生密钥,这些 cookie 是
可通过
cookies.signed 访问。
- 为所有
应用程序的命名为
message_verifier 实例。
在article by @michaeljcoyne 中查看有关这三个方面的更多信息。