我正在查看Kohana 3中的auth类以及登录脚本。当登录页面调用auth类的登录功能时,它将通过受保护的抽象函数_login返回。你为什么要出于好奇呢?我似乎无法理解什么是真正的区别,因为你将以任何方式返回相同的数据。在我脑海中游来游戏的一个选择是,通过一个受保护的摘要返回,你将确保数据从它被放入auth->登录功能的时间和它离开它的时间没有被修改。我想了解一些细微差别。感谢。
public function login($username, $password, $remember = FALSE)
{
if (empty($password))
return FALSE;
if (is_string($password))
{
// Get the salt from the stored password
$salt = $this->find_salt($this->password($username));
// Create a hashed password using the salt from the stored password
$password = $this->hash_password($password, $salt);
}
return $this->_login($username, $password, $remember);
}
然后......
abstract protected function _login($username, $password, $remember);
答案 0 :(得分:2)
这是模板方法设计模式的一个弱例子。每次有人想登录时,都必须对变量进行多次修改和检查。密码不能为空。密码必须经过哈希处理。
然后尝试登录用户。现在,这个函数是抽象的原因是登录例程可以用许多不同的方式实现;对于许多不同的数据库,有或没有会话等。
这个函数受到保护的原因是你不希望任何人直接调用_login的具体实现,而不首先运行先前的检查和修改(哈希密码等)。
总而言之,在调用真实登录函数的具体实现之前,它已经以这种方式编码以强制所有登录请求首先检查密码的长度,然后密码被散列。