我是否需要设计和轨道密钥?

时间:2015-06-16 20:03:03

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

config/initializers内,有secret_token.rbdevise.rb,两者都有一个用于输入密钥的插槽。为了设计它的config.secret_key和rails,它是Application.config.secret_key_base

我是否需要设置这两件事?我不明白哪些密钥控制哪些行为。

1 个答案:

答案 0 :(得分: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.

这意味着您没有为Devise设置单独的secret_key,因为如果您有secret_key_base,如代码中所示,那么'我只是默认。在我的情况下,我只是注释掉了代码,但您甚至可以删除分配config.secret_key的行。

Rails使用密钥

secret_key_base用于对Cookie进行签名和加密,this answer中对此进行了详细解释。