2012-06-19 69 views
1

我試圖做簡單的用戶身份驗證,但在會話控制器中調用Digest::SHA1::hexdigest正在生成與用戶模型中不同的哈希值。Digest :: SHA1 :: hexdigest爲相同的字符串生成不同的哈希值

user.rb:

class User < ActiveRecord::Base 

    before_save {|user| user.password = Digest::SHA1.hexdigest(user.password)} 
    ... 

    end 

sessions_controller.rb

def create 
     user = User.where(:username => params[:username], :password => Digest::SHA1.hexdigest(params[:password])).first 
    end 

有沒有什麼辦法解決這一問題?

例如,當我嘗試登錄時,字符串「password」顯示爲「5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8」。

然而,在數據庫中,相同的字符串,「密碼」,顯示爲: 「353e8061f2befecb6818ba0c034c632fb0bcae1b」

+0

你有一個真實的例子嗎?生成不同哈希的相同字符串? –

+0

@ airplaneman19除非使用某種鹽來加密,否則極不可能。但在你的情況下,我猜你不是。我懷疑你的'參數[:密碼]'是相同的user.password我想有一些額外的字符,如'空間'等等,造成這種 – Viren

+0

我剛剛添加了一個例子 – airplaneman19

回答

3

before_save運行在任何時候你保存,所以在創建您加密,然後在你的任何更新」再次加密(已加密的)。嘗試使用before_create。

+0

這沒有辦法。謝謝! – airplaneman19

相關問題