在config/initializers
内,有secret_token.rb
和devise.rb
,两者都有一个用于输入密钥的插槽。为了设计它的config.secret_key
和rails,它是Application.config.secret_key_base
。
我是否需要设置这两件事?我不明白哪些密钥控制哪些行为。
答案 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
的行。
secret_key_base
用于对Cookie进行签名和加密,this answer中对此进行了详细解释。