1

我正在尝试进行简单的用户身份验证,但是Digest::SHA1::hexdigest会话控制器中的调用产生的哈希值与用户模型中的哈希值不同。

用户.rb:

    class User < ActiveRecord::Base

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

    end

session_controller.rb

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

有没有什么办法解决这一问题?

例如,当我尝试登录时,字符串“密码”显示为“5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”。

但是,在数据库中,相同的字符串“密码”显示为:“353e8061f2befecb6818ba0c034c632fb0bcae1b”

4

1 回答 1

3

before_save 在您保存的任何时候运行,因此创建您加密,然后在您正在加密的任何更新(已经加密的更新)上再次运行。尝试使用 before_create。

于 2012-06-19T20:02:04.780 回答