2010-04-19 5 views
2

Je regarde la classe auth dans Kohana 3 ainsi qu'un script de connexion. Lorsque la page de connexion appelle la fonction de connexion de la classe auth, elle est renvoyée via une fonction abstraite protégée _login. Pourquoi le feriez-vous par curiosité? Je n'arrive pas à comprendre quelle serait la différence puisque vous retourneriez les mêmes données de toute façon. La seule option qui me trotte dans la tête est qu'en retournant via un abstract protégé, vous vous assureriez que les données n'ont pas été modifiées à partir du moment où elles ont été placées dans la fonction auth-> login et le temps qu'elles la quittent. J'essaie de comprendre certaines des nuances. Merci.Retour via une fonction protégée abstraite?

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

puis ....

abstract protected function _login($username, $password, $remember); 

Répondre

2

Ceci est un exemple faible du modèle de conception Méthode modèle. Chaque fois que quelqu'un veut se connecter, plusieurs modifications et contrôles doivent toujours être effectués par rapport aux variables. Le mot de passe ne doit pas être vide. Le mot de passe doit être haché.

Ensuite, une tentative d'enregistrement de l'utilisateur est effectuée. Maintenant, la raison pour laquelle cette fonction est abstraite est que la routine de connexion pourrait être implémentée de différentes manières; La raison pour laquelle cette fonction est protégée est que vous ne voulez pas que quiconque appelle l'implémentation concrète de _login directement, sans d'abord avoir les vérifications et modifications préalables (mot de passe de hachage etc.) s'exécuter en premier. Donc, pour résumer, il a été codé de cette manière pour forcer toutes les demandes de connexion à vérifier d'abord la longueur du mot de passe, puis le mot de passe, avant d'appeler une implémentation concrète de la fonction de connexion réelle.

Questions connexes