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 394dans 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