Rails身份验证简单的Ruby问题



这可能看起来很简单,但我有点困惑

这里有一些简单的身份验证代码:

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",那就行不通了?

您缺少它所属的周围类。它可能属于User类:

类用户def self.authenticate(用户名=",密码=")user=AdminUser.find_by_username(用户名)如果用户&&user.password_match?(密码)返回用户其他的return false终止终止是否定义密码匹配?(密码)hashed_password==AdminUser.hash_with_salt(密码,salt)终止终止

是的,它是该类上的一个方法。

user=user.authenticate("joe","12345")user.password_match?("12345")

注意一个是如何在类中调用的,一个是在从该类实例化的对象上调用的。

正如Paul提到的,这是self.hashed_password的快捷方式。。。但使用该快捷方式时可能会遇到麻烦,尤其是在指定快捷方式时-hashed_password = "..."在这种情况下,ruby可能不知道它是一个方法还是一个变量,它可能会将值分配给一个局部变量,而不是像您所期望的那样调用hashed_password=()方法。指定属性时始终使用self.hashed_password=()。:)

是的,你基本上是对的,因为这实际上只是的缩写

self.hashed_password == hashed_password == Admin....

所以其他任何东西都不能工作

最新更新