2010-09-10 70 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