Rails Rails 5.2 中的 secret_key_base

zouyu · 2018年05月10日 · 最后由 IChou 回复于 2018年05月10日 · 3043 次阅读

当 env 为 development 和 test 时使用,如下方式生成

Digest::MD5.hexdigest self.class.name

如果非以上两种方式,首先在 ENV["SECRET_KEY_BASE"]查找。

获取方式

Rails.application.secret_key_base

使用 credentials 来设置敏感配置信息

下图为源码:

呃 感觉你这描述略不具体呀,我来帮你补充一下吧

从这个改动我们可以获取 4 点信息:

  1. test 和 development 已经不需要像以前那样设置 secret_key_base 了,即使设置了,也没用
  2. 生产环境下,优先使用环境变量中的 SECRET_KEY_BASE,为什么要这样呢?我猜是为了向下兼容,毕竟这可能是用得最多的方式,不同的是这个变量名被硬编码了,以前是通过 secret.yml 来读取的,可以按你的心情随便改
  3. 没直接用环境变量的,就使用 5.2 的新特性 credentials,噹~噹~噹~~ 让我装逼让我飞,让我闪亮登场
  4. 如果没有用 credentials 呢?就从 secrets 中去读取,secrets 是个啥呢?还能是啥,老的那套方案呗,从 config/secrets.yml 或者 config/secrets.xxx 中去取值

结论:config/secrets.yml 这个文件已经没什么用了,删了吧,不用留着过年

需要 登录 后方可回复, 如果你还没有账号请 注册新账号