我正在尝试进行简单的用户身份验证,但会话控制器中对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”。
但是,在数据库中,相同的字符串“password”显示为: “353e8061f2befecb6818ba0c034c632fb0bcae1b”
答案 0 :(得分:3)
before_save会在您保存的任何时候运行,因此请创建加密,然后再对您正在加密的任何更新(已加密的更新)进行加密。尝试使用before_create。