Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-05-2009 11:45:39

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

[Résolu]probleme isValid() avec auth et adapter perso

Bonjour,

J'ai une interface ou on peut se connecter, et cette interface sera utilisé par plusieurs personnes.
Chaque personne dispose de son propre compte donc, et chaque compte a ses propres parametres et une base de données qui lui est propre.Bref,

j'aimerai stocker les informations des comptes sur un fichier comptes.ini de cette sorte:

[admins]
admin1 = pass1
admin2 = pass2
etc....


Pour cela j'ai crée un adaptateur Auth perso dont voici le code:

Code:

<?php 
class AdaptateurFichierAuth implements Zend_Auth_Adapter_Interface
{
    
    
    protected $_password;
    protected $_login;
    
    /**
     * Définition de l'identifiant et du mot de passe
     * pour authentification
     *
     * @return void
     */
    public function __construct()
    {
       
    }

   public function setLogin($login)
   {
       $this->_login=$login;
   }
   
   public function setPassword($pass)
   {
       $this->_password=$pass;
   }


    /**
     * Réalise une tentative d'authentification
     *
     * @throws Zend_Auth_Adapter_Exception Si l'authentification
     *                                     ne peut pas être réalisée
     * @return Zend_Auth_Result
     */
    public function authenticate()
    {
        
        return Zend_Auth_Result::SUCCESS;
        
        
     $comptes= new Zend_Config_Ini( '../application/comptes.ini','admins');
    //si le compte n'existe pas
     if(!$comptes->__isset($this->_login))
     {
     return Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND;    
     }
     else { //le compte existe
        if($comptes->get($this->_login)==$this->_password)
        {
            return Zend_Auth_Result::SUCCESS;
        }
        else
        {
            return Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID;
        }
         
     }
}
}

Jusque là pas de problème, si j'ai bien compris, ca renvoie un entier.

Par contre,
là ou je coince c'est ici, dans le login controller (voici un bout de mon code) :

Code:

// Définition de l'adaptateur d'authentification
            $authAdaptateur = new AdaptateurFichierAuth();
            $authAdaptateur->setLogin($username);
            $authAdaptateur->setPassword($password);
            
            //recuperation de l'instance de auth
             $auth = Zend_Auth::getInstance();
            // Tentative d'authentification et stockage du résultat
        

            $result = $auth->authenticate($authAdaptateur);

            if ($result->isValid() === false) {

            // Echec de l'authentification ; afficher pourquoi
            $this->view->message = 'Erreur de connexion.';
                }
             else {
                   $resultat->getIdentity() === $identifiant;
                
                }
            }

D'après ce que je comprends, on récupère l'instance de Zend_Auth, et sa méthode authenticate($monadapt) execute $monadapt->authenticate().

Cela dit, ensuite on execute (auth->isValid()) mais là j'ai une erreur Call to a member function isValid() on a non-object in /var/www/www.infolien.eu/library/Zend/Auth.php et je ne comprends pas d'ou ca vient puisque j'ai pourtant l'instance de Auth, non?

Un petit coup demain serait le bienvenu.

Merci par avance pour votre aide.

Dernière modification par gostbuster (28-05-2009 14:32:01)


Gostbuster - Développeur WEB

Hors ligne

 

#2 28-05-2009 13:46:54

Nikko
Membre
Lieu: Rueil (Haut-de-Seine)
Date d'inscription: 19-12-2008
Messages: 95

Re: [Résolu]probleme isValid() avec auth et adapter perso

Salut l'ami !
Je n'ai pas procédé de la même façon que toi. Ma fonction authenticate() de mon adapter retourne un Zend_Auth_Result.

Voici un boute de ma fonction authenticate() qui gère une authentification LDAP :

Code:

$auth = Zend_Auth::getInstance();
$ad = new Zend_Auth_Adapter_Ldap($options->toArray(), $username, $password);
$resultat = $auth->authenticate($ad);
            if ($resultat) 
            {
                $res = new Zend_Auth_Result(
                    Zend_Auth_Result::SUCCESS,
                    $this->login,
                    array()
                );
}

Et puis, dans mon AuthController, j'ai ceci :

Code:

$auth = new AuthAdapter($login, $password);
                $res = $auth->authenticate($login, $password);
                switch ($res->getCode()) 
                {
                    case Zend_Auth_Result::FAILURE:
                        throw new Exception('Mot de passe incorrect, merci de vérifier votre saisie pour continuer');
                    break;
                    
                    case Zend_Auth_Result::SUCCESS:
                        header("Cache-control: private, no-cache");
                        header("Expires: Mon, 25 Feb 2002 01:00:00 GMT");
                        header("Pragma: no-cache");
                        header("content-type: text/html; charset=iso-8859-1");
                        print "{success:true}";
}

J'espère que ça t'aidera et que ça répondra à tes attentes...


Nikko

Etudiant en école d'ingénieur à l'INSIA

Hors ligne

 

#3 28-05-2009 14:31:27

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: [Résolu]probleme isValid() avec auth et adapter perso

Salut mon gars, j'espère que tu vas bien !

J'ai résolu mon problème, il s'agissait d'un problème de retour.
Sur ce forum, j'avais lu un topic (que je ne retrouve plus), ou quelqu'un disait qu'il fallait retourner Zend_Auth_Result::LAREPONSE...
or, il faut en fait retourner UNE INSTANCE de Zend_Auth_Return.

Ce qui donne la fonction suivante :

Code:

    public function authenticate()
    {
     $comptes= new Zend_Config_Ini( '../dossierdufichier/comptes.ini','admins');
    //si le compte n'existe pas
     if(!$comptes->__isset($this->_login))
     {
     return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND,$this->_login)    ;
     }
     else { //le compte existe
        if($comptes->get($this->_login)==$this->_password)
        {
            return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS,$this->_login);
        }
        else
        {
            return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND,$this->_login);
        }
         
     }
}

En tout cas merci pour ta réponse mon gars.

Dernière modification par gostbuster (28-05-2009 14:31:46)


Gostbuster - Développeur WEB

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages