2012-06-19 67 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

相关问题