35

我正在尝试 Devise 如何与我的一个项目一起使用以进行用户身份验证。有一个用户要求,他们的管理员应该能够不时生成一批用户名和用户密码,然后管理员会将新的用户名和密码通过电子邮件发送给他的用户。

假设管理员对 MySQL 数据库有直接的 SQL 知识,那么生成的用户名/密码如何被 Devise 识别?谢谢!

4

4 回答 4

83

使用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 提供password_length的方法来删除生成的标记的第一个字符。String#first

于 2011-08-29T14:39:20.843 回答
6

一种选择是使用 Devise.generate_token。IE

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

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

于 2010-12-13T21:31:21.300 回答
5

我正在使用devise-securitygem 并且有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, '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"

于 2019-01-16T16:01:05.443 回答
0

(快速警告:我是 Rails 新手)

我尝试了 generate_token 但它并没有按照你的想法做(查看文档)

(我使用的是 rails 3.0.5,并设计了 1.1.7)

我发现当你这样做时,Devise 会在后台为你生成所有这些东西:

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

设计应该为您创建 encrypted_pa​​ssword 和 salt。(弹出一个控制台并在那里尝试)

于 2011-03-04T16:27:25.997 回答