这可能看起来很简单,但我有点困惑
以下是一些简单的身份验证代码:
def self.authenticate(username="", password="")
user = AdminUser.find_by_username(username)
if user && user.password_match?(password)
return user
else
return false
end
end
def password_match? (password)
hashed_password == AdminUser.hash_with_salt(password, salt)
end
我的问题是,在def password_match?中,它如何访问用户对象中的内容?因为用户叫它吗?所以,如果它说“hashed_pwd”而不是“hashed_password”那么它会起作用吗?
答案 0 :(得分:3)
你错过了它所属的周围类。据推测它属于User类:
class User def self.authenticate(username="", password="") user = AdminUser.find_by_username(username) if user && user.password_match?(password) return user else return false end end def password_match? (password) hashed_password == AdminUser.hash_with_salt(password, salt) end end
所以是的,这是该课程的一种方法。
user = User.authenticate("joe","12345") user.password_match?("12345")
注意如何将一个类称为一个类,并在从该类实例化的对象上调用一个。
正如保罗所提到的,它是self.hashed_password
的捷径......但是你可以使用这种快捷方式遇到麻烦,特别是在分配给它时 -
hashed_password = "..."
在这种情况下,ruby可能不知道它是方法还是变量,它可能会将值赋给局部变量,而不是像您期望的那样调用hashed_password=()
方法。分配属性时始终使用self.hashed_password=()
。 :)
答案 1 :(得分:1)
是的,你基本上是正确的,因为这只是
的简写self.hashed_password == hashed_password == Admin....
所以其他任何东西都行不通