ruby-on-rails 如何在Rails Devise中自动生成密码?

h5qlskok  于 2023-02-06  发布在  Ruby
关注(0)|答案(4)|浏览(184)

我正在试用Devise如何与我的一个项目一起进行用户认证。有一个用户要求他们的管理员应该能够不时地生成一批用户名和用户密码,然后管理员将新的用户名和密码通过电子邮件发送给他的用户。
假设管理员有MySQL数据库的直接SQL知识,那么生成的用户名/密码如何被Devise识别呢?谢谢!

8fsztsew

8fsztsew1#

使用Devise.friendly_token方法:

password_length = 6
password = Devise.friendly_token.first(password_length)
User.create!(:email => 'someone@something.com', :password => password, :password_confirmation => password)

仅供参考:Devise.friendly_token返回一个20个字符的令牌,在上面的例子中,我们使用Rails提供的String#first方法来截断生成的令牌的前password_length个字符。

5tmbdcev

5tmbdcev2#

一种选择是使用Devise.generate_token。

password = User.generate_token('password')
User.create!(:email => 'someone@something.com', :password => password, :password_confirmation => password)

这个选项在Devise中已经有一段时间不可用了。请参考其他答案(friendly_token)。

cld4siwp

cld4siwp3#

我使用的是devise-security gem,具体的password_complexity要求如下:
config.password_complexity = { digit: 1, lower: 1, upper: 1 }
如果您使用此代码:Devise.friendly_token.first(password_length)来生成密码,但并不总能保证您获得与您的复杂性相匹配的密码。
所以我写了一个密码生成器,它将尊重您的password_complexity,并将生成一个随机投诉密码:

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

您可以按如下方式使用它:
PasswordGenerator.new.password # "qHc165ku"

b91juud3

b91juud34#

(快速警告:我是铁路新手b)
我尝试了generate_token,但它并不像您所想的那样(请查看文档)
(我使用的是rails 3.0.5,而设计的是1.1.7)
我发现Devise会在后台为你生成所有这些东西:

User.create!(:email => "me@example.com", :password => "password")

Devise应该为你创建encrypted_password和salt。(弹出一个控制台并在那里尝试)

相关问题