新手问题 rails tutorial 里面的问题

villins · 2012年10月14日 · 最后由 xiaoronglv 回复于 2012年10月14日 · 2751 次阅读

如下面这个代码

before_save :encrypt_password

def has_password?(submitted_password)
  encrypted_password == encrypt(submitted_password)
end
private
  def encrypt_password
    self.salt = make_salt if new_record?
  self.encrypted_password = encrypt(password)
  end
  def encrypt(string)
    secure_hash("#{salt}--#{string}")
  end
  def make_salt
    secure_hash("#{Time.now.utc}--#{password}")
  end
  def secure_hash(string)
    Digest::SHA2.hexdigest(string)
  end
end

中的

def has_password?(submitted_password)
  encrypted_password == encrypt(submitted_password)
end

的 encrypted_password 是使用的 encrypted_password 方法还是 model 的变量的呢?

rails tutorails 中的这段代码

$ rails console --sandbox
>> User.create(:name => "Michael Hartl", :email => "[email protected]",
:password => "foobar", :password_confirmation => "foobar")
>> user = User.find_by_email("[email protected]")
>> user.has_password?("foobar")

返回是 true 而我测试的是 false 检查出来的原因,在调用 has_password?中的 self.encrypted_password = encrypt(password) 的 password 是空值

是不是 rails tutorails 书上错误,还是我理解代码写错了,忘指点迷津下

encrypted_password 是变量啦,看清楚,那个方法叫 encrypt_password。 然后。。楼主写的这段if new_record?在哪里啊? 而且最好先检查一下在 console 里的那个用户创建有没有问题?password 怎么是空的呢?

其实你只需要一句代码就够了

has_secure_password

需要 登录 后方可回复, 如果你还没有账号请 注册新账号