class PasswordGenerator
include ActiveModel::Validations
validates :password, presence: true, 'devise_security/password_complexity': Devise.password_complexity
attr_reader :password
def initialize
@password = Devise.friendly_token.first(Devise.password_length.first) until valid?
end
end
4条答案
按热度按时间8fsztsew1#
使用
Devise.friendly_token
方法:仅供参考:
Devise.friendly_token
返回一个20个字符的令牌,在上面的例子中,我们使用Rails提供的String#first
方法来截断生成的令牌的前password_length
个字符。5tmbdcev2#
一种选择是使用Devise.generate_token。
这个选项在Devise中已经有一段时间不可用了。请参考其他答案(friendly_token)。
cld4siwp3#
我使用的是
devise-security
gem,具体的password_complexity
要求如下:config.password_complexity = { digit: 1, lower: 1, upper: 1 }
如果您使用此代码:
Devise.friendly_token.first(password_length)
来生成密码,但并不总能保证您获得与您的复杂性相匹配的密码。所以我写了一个密码生成器,它将尊重您的
password_complexity
,并将生成一个随机投诉密码:您可以按如下方式使用它:
PasswordGenerator.new.password # "qHc165ku"
b91juud34#
(快速警告:我是铁路新手b)
我尝试了generate_token,但它并不像您所想的那样(请查看文档)
(我使用的是rails 3.0.5,而设计的是1.1.7)
我发现Devise会在后台为你生成所有这些东西:
Devise应该为你创建encrypted_password和salt。(弹出一个控制台并在那里尝试)