Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-06-2008 23:26:30

Badoux
Membre
Date d'inscription: 25-03-2008
Messages: 32

[Résolu] Erreur avec Zend_Auth

Bonjour,

Pas de chance, je viens de tester mon premier loginAcces avec l'utilisation de Zend_Auth et un tuto que j'ai chopé ici:

http://r-benyacoub.developpez.com/tutor … e=methodes

mais j'obtiens un bug:

Code:

Fatal error: Uncaught exception 'Zend_Auth_Adapter_Exception' with message 'The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.' in E:\wamp\www\projects\Oreka_Tracker\library\Zend\Auth\Adapter\DbTable.php:394 Stack trace: #0 E:\wamp\www\projects\Oreka_Tracker\library\Zend\Auth\Adapter\DbTable.php(287): Zend_Auth_Adapter_DbTable->_authenticateQuerySelect(Object(Zend_Db_Select)) #1 E:\wamp\www\projects\Oreka_Tracker\library\Zend\Auth.php(118): Zend_Auth_Adapter_DbTable->authenticate() #2 E:\wamp\www\projects\Oreka_Tracker\application\controllers\AuthController.php(40): Zend_Auth->authenticate(Object(Zend_Auth_Adapter_DbTable)) #3 E:\wamp\www\projects\Oreka_Tracker\library\Zend\Controller\Action.php(502): AuthController->loginAction() #4 E:\wamp\www\projects\Oreka_Tracker\library\Zend\Controller\Dispatcher\Standard.php(293): Zend_Controller_Action->dispatch('loginAction') #5 E:\wamp\www\projects\Oreka_Tracker\library\Zend\Controller\F in E:\wamp\www\projects\Oreka_Tracker\library\Zend\Auth\Adapter\DbTable.php on line 394

dans ma table "user", j'ai les colonnes "username" - "password". Le password est enregistré en MD5.

rein à faire! J'ai fais le tour, mais le bug reste la. J'ai regardé et re regardé les nom des colonnes, etc... mais rein !

Une idée ?

Voila la classes AuthController:

Code:

<?php
class AuthController extends Zend_Controller_Action
{
    public $db = null;
    
    function init()
    {
        $this->initView();
        $this->view->baseUrl = $this->_request->getBaseUrl();
        $this->view->user = Zend_Auth::getInstance()->getIdentity();
        
        $this->db = Zend_Registry::get('dbAdapter');
    }
                        
    function indexAction()
    {
        
    }
    
    function loginAction()
    {
        $this->view->message = '';
        
        if ($this->getRequest())
        {
            $username = $this->getRequest('username');
            $password = $this->getRequest('password');

            if (empty($username)) {
                $this->view->message = 'Please provide a username.';
            } else {
                $authAdapter = new Zend_Auth_Adapter_DbTable($this->db);
                $authAdapter->setTableName('user')
                            ->setIdentityColumn('username')
                            ->setCredentialColumn('password')
                            ->setIdentity($username)
                            ->setCredential($password);

                $auth = Zend_Auth::getInstance();
                $result = $auth->authenticate($authAdapter);

                if ($result->isValid())
                {
                    $data = $authAdapter->getResultRowObject(null, 'password');
                    $auth->getStorage()->write($data);
                    $this->_redirect($this->view->baseUrl);
                } else {
                    $this->view->message = 'Login failed.';
                }
            }
        }
        $this->view->title = "Log in";
        $this->render();
    }
    
    function logoutAction()
    {
        Zend_Auth::getInstance()->clearIdentity();
        $this->_redirect('auth/login');
    }
}

Merci beaucoup

Dernière modification par Badoux (25-06-2008 10:21:53)

Hors ligne

 

#2 25-06-2008 02:21:34

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Résolu] Erreur avec Zend_Auth

Salut,
Tu dis que ton password est enreigistré en MD5 or, dans ton code, tu ne le mentionne pas.

Mets :

Code:

    $authAdapter = new Zend_Auth_Adapter_DbTable($this->db);
    $authAdapter->setTableName('user')
                        ->setIdentityColumn('username')
                        ->setCredentialColumn('password')
                        ->setIdentity($username)
                        ->setCredential(md5($password));

à la place de :

Code:

    $authAdapter = new Zend_Auth_Adapter_DbTable($this->db);
    $authAdapter->setTableName('user')
                        ->setIdentityColumn('username')
                        ->setCredentialColumn('password')
                        >setIdentity($username)
                        ->setCredential($password);

Tu peux faire aussi comme ceci:

Code:

    $authAdapter = new Zend_Auth_Adapter_DbTable(
                                $this->db,                //dbAdapter                                
                                'user',                   //tableName
                                'username',               //identityColumn
                                'password',               //credentialColumn
                                'MD5(?)'                  //credentialTreatment
                           );
    $authAdapter->setIdentity($username)
                ->setCredential($password);

A+

Hors ligne

 

#3 25-06-2008 09:19:40

Badoux
Membre
Date d'inscription: 25-03-2008
Messages: 32

Re: [Résolu] Erreur avec Zend_Auth

Salut -=blu3+3y3s=-,

Merci de ta participation, mais hors mon oublie de spécifier le md5 du mot de passe, l'erreur persiste.

A tu regardé le message d'erreur ? Il ne dit pas que c'est un problème de cryptage, mais il demande de vérifier la validité du nom de la table et le nom des colonnes.

Code:

Fatal error: Uncaught exception 'Zend_Auth_Adapter_Exception' with message 'The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.' in

Une idée ?

Voici la table que j'ai:

Code:

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `firstname` varchar(255) collate utf8_unicode_ci NOT NULL,
  `secondname` varchar(255) collate utf8_unicode_ci NOT NULL,
  `username` varchar(30) collate utf8_unicode_ci NOT NULL,
  `password` varchar(50) collate utf8_unicode_ci NOT NULL,
  `email` varchar(255) collate utf8_unicode_ci NOT NULL,
  `title` varchar(255) collate utf8_unicode_ci NOT NULL,
  `folder` text collate utf8_unicode_ci,
  `group_id` int(11) default '2',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`username`),
  KEY `ix_user_group_id` (`group_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;

Si cela peut aider, à la résolution du problème wink
Merci

Hors ligne

 

#4 25-06-2008 10:19:57

Badoux
Membre
Date d'inscription: 25-03-2008
Messages: 32

Re: [Résolu] Erreur avec Zend_Auth

[Resolu]

Ok, alors l'erreur venait nom pas des PARAMS comme il le prétend dans le message d'erreur, mais dans les données qui sont passé.

Soit dans l'exemple, j'utilise la fonction

Code:

$this->getRequest()

pour récupérer les coordonnées (username/password) passé par POST. Mais le problème c'est que cette fonction ne semble pas fonctionner. Du coup, aucun donnée ne sont envoyée dans la verification. Du coup, une erreur survient.

Solution: Utiliser

Code:

$username = $this->_request->getPost('username');
            $password = $this->_request->getPost('password');

au lieu de

Code:

$username = $this->getRequest('username');
            $password = $this->getRequest('password');

Du coup cela fonctionne très bien big_smile

Hors ligne

 

#5 25-06-2008 11:53:43

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Résolu] Erreur avec Zend_Auth

Salut,
Heureux que tu es résolu ton problème smile.
Par contre, il y a quelque chose que je ne comprends pas, c'est le fait que le programme ne t'ait pas renvoyé d'erreur avant étant donné qu'il n'existe pas de fonction "getRequest($var)".
Mais bon....

A+

Hors ligne

 

#6 25-06-2008 13:33:51

Badoux
Membre
Date d'inscription: 25-03-2008
Messages: 32

Re: [Résolu] Erreur avec Zend_Auth

Ouai je sais, je trouve aussi bisarre.

Mais bon, il existe bien une fonction getRequest

Code:

$this->getRequest()->lavaleurenvoyé

mais je la déclarais comme ça:

Code:

$this->getRequest(lavaleurenvoyé)

Donc, il connait une fonction getRequestion, mais la elle était mal déclaré.

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