Возврат через абстрактную защищенную функцию? - PullRequest
2 голосов
/ 19 апреля 2010

Я смотрю на класс аутентификации в Kohana 3, а также на скрипт входа в систему. Когда страница входа в систему вызывает функцию входа в класс auth, она возвращается через защищенную абстрактную функцию _login. Почему вы делаете это из любопытства? Кажется, я не могу понять, в чем будет разница, поскольку вы в любом случае будете возвращать одни и те же данные. Один из вариантов, который мне нравится, заключается в том, что, возвращаясь через защищенный реферат, вы будете уверены, что данные не были изменены с момента, когда они были введены в функцию auth-> login, и с момента, когда они покинули его. Я пытаюсь понять некоторые нюансы. Спасибо.

 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);

1 Ответ

2 голосов
/ 19 апреля 2010

Это слабый пример шаблона проектирования Template Template. Каждый раз, когда кто-то хочет войти в систему, необходимо всегда делать несколько изменений и проверок переменных. Пароль не должен быть пустым. Пароль должен быть хеширован.

Затем выполняется попытка входа пользователя. Теперь, причина того, что эта функция является абстрактной, заключается в том, что процедура входа в систему может быть реализована различными способами; для ряда различных баз данных, с сеансами или без них и т. д.

Причина, по которой эта функция защищена, заключается в том, что вы не хотите, чтобы кто-либо вызывал конкретную реализацию _login напрямую, без предварительного запуска предварительных проверок и модификаций (хэширования пароля и т. Д.).

Итак, подведем итог: он был закодирован таким образом, чтобы заставить все запросы на вход в систему сначала проверять длину пароля, а затем хэшировать пароль, прежде чем будет вызвана конкретная реализация реальной функции входа.

...