【发布时间】:2010-09-10 01:52:55
【问题描述】:
我正在尝试 Devise 如何与我的一个项目一起使用以进行用户身份验证。有一个用户要求,他们的管理员应该能够不时生成一批用户名和用户密码,然后管理员将新的用户名和密码通过电子邮件发送给他的用户。
假设管理员对 MySQL 数据库有直接 SQL 的知识,那么生成的用户名/密码如何被 Devise 识别?谢谢!
【问题讨论】:
标签: ruby-on-rails devise
我正在尝试 Devise 如何与我的一个项目一起使用以进行用户身份验证。有一个用户要求,他们的管理员应该能够不时生成一批用户名和用户密码,然后管理员将新的用户名和密码通过电子邮件发送给他的用户。
假设管理员对 MySQL 数据库有直接 SQL 的知识,那么生成的用户名/密码如何被 Devise 识别?谢谢!
【问题讨论】:
标签: ruby-on-rails devise
使用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 字符。
【讨论】:
一种选择是使用 Devise.generate_token。即
password = User.generate_token('password')
User.create!(:email => 'someone@something.com', :password => password, :password_confirmation => password)
这个选项在 Devise 中已经有一段时间不可用了。请参考其他答案(friendly_token)。
【讨论】:
Devise.token_generator。
我正在使用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, '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"
【讨论】:
(快速警告:我是 Rails 新手)
我尝试了 generate_token,但它并没有按照你的想法做(查看文档)
(我使用的是 rails 3.0.5,并设计了 1.1.7)
我发现当你这样做时,Devise 会在后台为你生成所有这些东西:
User.create!(:email => "me@example.com", :password => "password")
Devise 应该为您创建 encrypted_password 和 salt。 (弹出控制台并在那里尝试)
【讨论】: