如何自定义生成的令牌的长度:devise中的token_authenticatable - Rails 3?

时间:2011-04-04 05:18:53

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

我生成的令牌似乎大约有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)

当我尝试运行控制台时,两者都给了我错误。

有没有这样做?

2 个答案:

答案 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,您将看到一个长代码,即散列令牌,而不是真正的代码。)