2012-06-19 44 views
0

我建立一個「更改密碼」的形式爲我的用戶使用這些領域建立正確的:測試此密碼是當前登錄的用戶

  • 舊密碼
  • 新密碼
  • 確認密碼

我需要一種方法來檢查當前登錄的用戶密碼是否與「舊密碼」字段相同,有沒有可能做到這一點,用authlogic?我找不到測試密碼的方法。

+0

我不知道什麼authlogic。但是,你永遠不應該存儲密碼,只能醃製SHA-1(或更好)哈希值,正確嗎?所以你應該使用相同的呼叫來測試密碼是否正確。 –

+0

我知道,這就是爲什麼我這樣問:密碼通過authlogic以某種方式散列(我不知道),我想檢查我的密碼對散列的一個 –

回答

4

Authlogic有一個valid_password?方法。見:http://rubydoc.info/github/binarylogic/authlogic/master/Authlogic/ActsAsAuthentic/Password/Methods/InstanceMethods#valid_password%3F-instance_method

所以,你可以

if @user.valid_password?(params[:old_password]) 
    @user.password = params[:new_password] 
    @user.password_confirmation = params[:new_password_confirmation] 
end 

(或類似)

+1

+1,我正要給同樣的答案。您可能想要更新答案,將第二個參數設置爲true,以檢查數據庫而不是手中的對象,即'@ user.valid_password?(params [:password],true)' –

+0

非常感謝,那就是我在尋找! –

+0

@KandadaBoggu:我現在有一個問題,當我更改密碼時,UserSession.find返回nil,即使在UserSession.new({...})。save,任何解決方案之後? –