我生成的令牌似乎大约有20个字符,如何将长度更改为其他字符?
我检查了devise.rb
文件并尝试了两种方法:
config.token_authentication_key = :access_key
config.token_authenticatable.length = 40
产生了这个错误:
config/initializers/devise.rb:110:in `block in <top (required)>': undefined method `token_authenticatable' for Devise:Module (NoMethodError)
和
config.token_authentication_key = :access_key
config.token_authentication_key.length = 40
产生了这个错误:
/config/initializers/devise.rb:110:in `block in <top (required)>': undefined method `length=' for :access_key:Symbol (NoMethodError)
当我尝试运行控制台时,两者都给了我错误。
有没有这样做?
答案 0 :(得分:2)
Devise不提供设置此令牌长度的功能。您必须覆盖模型上的generate_token
方法才能更改此令牌的结果。
答案 1 :(得分:1)
我实现了更改覆盖reset_token_password
方法的friendly_token
长度。例如:
module Devise
def self.friendly_token(_length = 20)
SecureRandom.urlsafe_base64(5).tr('lIO0', 'sxyz')
end
end
(请记住,令牌在数据库中进行了哈希处理,因此即使您成功设置了较短的代码,如果执行user.reset_password_token
,您将看到一个长代码,即散列令牌,而不是真正的代码。)