2014-11-04 78 views
0

我有一個存儲在數據庫中的密碼。
用戶應該可以設置一個新的。
我還使用attr_encrypted gem將其作爲加密文本存儲(對稱,因爲我需要它連接到其他服務,而不僅僅是登錄),但這是另一回事。
當我顯示錶格時,由於明顯的安全原因,ruby助手的默認行爲是不發回密碼到瀏覽器
下面是代碼:導軌,提供密碼的視覺反饋,但保持安全

<%= f.input :app_password, :as => :password %> 

這種行爲可能是好的,但由其引起的一些問題。

  • 如果用戶用空密碼保存表格,密碼將被刪除。我應該測試並避免空密碼的節省,但在某些應用程序中,空密碼是可以接受的,這樣做可以避免這種可能性。
  • 它並未向用戶提供關於他或她已編譯密碼字段的視覺反饋。
  • 它不驗證

什麼這裏是我的選擇,以獲得最標準的可能的行爲(即沒有「更改密碼」複選框)發揮得很好?

+0

首先,我將創建一個用於更改密碼和唯一密碼的單獨表單(不確定是否適用於您,或者您讓用戶將其與其他字段一起更改)。其次,顯然,有密碼和password_confirmation在那裏,並檢查它們是否匹配。第三,讓用戶輸入現有的密碼以及新的密碼,這樣用戶不能通過點擊「確定」來刪除它。另外,如果你想要的話,檢測一個空的新密碼,然後問'你確定嗎?' – moonfly 2014-11-04 17:06:06

回答

0

請在形式包括密碼字段是這樣的:

<%= f.password_field :app_password %> 

標準的使用和設置密碼的是:

添加到您的用戶模型調用has_secure_password

添加字段用戶存儲一個描述密碼,遷移:add_column :users, :auth_token, :string

創建之前生成令牌:

begin 
    self.auth_token = SecureRandom.urlsafe_base64 
end while User.exists?(auth_token: self.auth_token) 

@user.authenticate(params[:password])

更新密碼的另一種形式有3個字段,OLD_PASSWORD,密碼和驗證password_confirmation你的用戶。