我正在尝试 Devise 如何与我的一个项目一起使用以进行用户身份验证。有一个用户要求,他们的管理员应该能够不时生成一批用户名和用户密码,然后管理员会将新的用户名和密码通过电子邮件发送给他的用户。
假设管理员对 MySQL 数据库有直接的 SQL 知识,那么生成的用户名/密码如何被 Devise 识别?谢谢!
我正在尝试 Devise 如何与我的一个项目一起使用以进行用户身份验证。有一个用户要求,他们的管理员应该能够不时生成一批用户名和用户密码,然后管理员会将新的用户名和密码通过电子邮件发送给他的用户。
假设管理员对 MySQL 数据库有直接的 SQL 知识,那么生成的用户名/密码如何被 Devise 识别?谢谢!
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
一种选择是使用 Devise.generate_token。IE
password = User.generate_token('password')
User.create!(:email => 'someone@something.com', :password => password, :password_confirmation => password)
此选项在 Devise 中已经有一段时间不可用了。请参考其他答案(friendly_token)。
我正在使用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")
设计应该为您创建 encrypted_password 和 salt。(弹出一个控制台并在那里尝试)