【问题标题】:Do I need both devise and rails secret keys?我需要 devise 和 rails 密钥吗?
【发布时间】:2015-09-01 19:59:42
【问题描述】:

在config/initializers 内部有secret_token.rb 和devise.rb,它们都有一个用于输入密钥的槽。设计它的config.secret_key 和rails 它是Application.config.secret_key_base。

我需要同时设置这两项吗?我不明白哪些密钥控制哪些行为。

【问题讨论】:

  • 我没有找到任何secret_token.rb。您使用的是哪个版本的 Rails?
  • @Pavan:根据this answer,该文件用于 rails 3 和 4,在 4.1 中已弃用。但我对secrets.yml 有类似的问题

标签: ruby-on-rails ruby-on-rails-4 devise


【解决方案1】:

一开始我也有点纠结这个问题,因为我认为文档中并没有那么清楚地解释。

设计密钥的使用

来自设计repository:

initializer "devise.secret_key" do |app|
  if app.respond_to?(:secrets)
    Devise.secret_key ||= app.secrets.secret_key_base
  elsif app.config.respond_to?(:secret_key_base)
    Devise.secret_key ||= app.config.secret_key_base
  end

  Devise.token_generator ||=
    if secret_key = Devise.secret_key
      Devise::TokenGenerator.new(
        ActiveSupport::CachingKeyGenerator.new(ActiveSupport::KeyGenerator.new(secret_key))
      )
    end
end

一旦分配了Devise.secret_key,它就会被用来生成一个令牌,如果我没记错的话,它又被用于几个设计功能,比如账户确认、重置密码和解锁账户。所有这些都需要由上面的代码生成的令牌。

来自devise.rb:

# The secret key used by Devise. Devise uses this key to generate
# random tokens. Changing this key will render invalid all existing
# confirmation, reset password and unlock tokens in the database.
# Devise will use the `secret_key_base` as its `secret_key`
# by default. You can change it below and use your own secret key.

这意味着您不必设置单独的secret_key 以使设计工作,因为如果您有一个secret_key_base,如代码所示,它将默认为那。就我而言,我只是注释掉了代码,但您甚至可以删除分配 config.secret_key 的行。

Rails 密钥的使用

secret_key_base用于对cookies进行签名和加密,this answer中有很好的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多