Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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:
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:
<?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
Salut,
Tu dis que ton password est enreigistré en MD5 or, dans ton code, tu ne le mentionne pas.
Mets :
$authAdapter = new Zend_Auth_Adapter_DbTable($this->db); $authAdapter->setTableName('user') ->setIdentityColumn('username') ->setCredentialColumn('password') ->setIdentity($username) ->setCredential(md5($password));
à la place de :
$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:
$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
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.
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:
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
Merci
Hors ligne
[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
$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
$username = $this->_request->getPost('username'); $password = $this->_request->getPost('password');
au lieu de
$username = $this->getRequest('username'); $password = $this->getRequest('password');
Du coup cela fonctionne très bien
Hors ligne
Salut,
Heureux que tu es résolu ton problème .
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
Ouai je sais, je trouve aussi bisarre.
Mais bon, il existe bien une fonction getRequest
$this->getRequest()->lavaleurenvoyé
mais je la déclarais comme ça:
$this->getRequest(lavaleurenvoyé)
Donc, il connait une fonction getRequestion, mais la elle était mal déclaré.
Hors ligne