2010-09-10 71 views
28

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

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

回答

73

使用Devise.friendly_token方法:

password_length = 6 
password = Devise.friendly_token.first(password_length) 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

FYI:Devise.friendly_token返回一个20字符标记。在上面的例子中,我们通过使用Rails提供的String#first方法斩掉生成的令牌的第一个password_length字符。

6

一个选项是使用Devise.generate_token。即

password = User.generate_token('password') 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

此选项在设计一直没有使用了相当长一段时间。请参阅其他答案(friendly_token)。

+4

这似乎不再适用于最新版本。我正在为generate_token收到一个'受保护的方法'错误。 – 2011-10-03 08:17:39

+0

其不能在最新版本中工作 – 2013-03-06 12:49:15

+0

您目前需要使用'Devise.token_generator'。 – typeoneerror 2015-04-02 18:47:22

0

(快速警告:我是一个轨道福利局)

我试过generate_token但它不会做你认为(看文档)

(我使用的轨道3.0。 5,并制定1.1.7)

我发现那是什么设计会产生所有的东西,你在后台,当你做:

User.create!(:email => "[email protected]", :password => "password") 

设计应该创建encrypted_pa​​ssword和SA对你而言。 (弹出打开控制台,并尝试一下那里)

+0

OP在询问如何为新用户自动“生成”新密码。你在这里做的是将每个新用户的密码设置为“密码”。当然,它在数据库中被加密,但你将会受到字典(猜测)攻击的超级攻击。如果您使用令牌生成唯一密码(即,生成令牌),则您非常安全,因为这些令牌相当长且复杂(混合字符类型,不基于字典等)。 – 2011-05-02 16:42:51

+0

它看起来像我问他如何输入生成的用户名和密码,并让他们处理Devise。他特别询问:“Devise如何识别生成的用户名/密码?”我采取的意思是:我们已经有一个生成的用户名和密码列表,但我不知道如何将这些信息插入到数据库中,以便设计人员能够识别它。我上面展示的只是所有的后台加密等都将由Devise处理,不需要通过后端数据库。 – 2011-05-16 15:53:19

+0

而且我被__definitely__ ** NOT **建议他们为每个新用户使用“密码”。希望这不是它遇到的方式。这确实是添加新用户的难以置信的方式。我原本以为'generate_token'是为了生成encrypted_pa​​ssword,因为OP暗示可以直接访问数据库(一起绕过ActiveRecord)。 – 2011-05-16 15:56:51