2010-04-19 2 views
2

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

답변

2

이것은 템플릿 메소드 디자인 패턴 약함 예이다. 누군가 로그인하기를 원할 때마다 항상 변수에 대해 여러 가지 수정과 점검을해야합니다. 암호는 비워 둘 수 없습니다. 암호는 해시되어야합니다.

그런 다음 사용자 로그인을 시도합니다. 이제이 함수가 추상적이라는 이유는 로그인 루틴이 여러 가지 다른 방식으로 구현 될 수 있기 때문입니다. 세션이 있거나없는 여러 데이터베이스의 경우

이 기능이 보호되는 이유는 이전에 확인 및 수정을하지 않고서도 누구나 _login의 구체적인 구현을 직접 호출하지 않기를 바랍니다 (해싱 암호 등)가 먼저 실행됩니다.

이렇게 요약하면, 실제 로그인 기능의 구체적인 구현이 호출되기 전에 모든 로그인 요청을 먼저 확인하고 암호를 해시 한 다음 암호를 해싱하도록이 방법으로 코딩되었습니다.

관련 문제