Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth
Zend_Acl & Zend_Auth Forum d'entraide pour les composants Zend_Acl & Zend_Auth du Zend Framework (contrôle d'accès, gestion des droits, authentification, etc.). Avant de poster -> Cours Zend_Acl et Zend_Auth.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2011, 16h23   #1
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
Par défaut Erreur ZEND_auth

Bonjour,
je viens faire appel à vous car je bloque depuis quelque jours sur ce problème.
Lorsque je valide mon formulaire de connexion, j'ai cette erreur qui s'affiche :

Code :
Catchable fatal error: Argument 1 passed to Zend_Auth::authenticate() must implement interface Zend_Auth_Adapter_Interface, null given, called in /var/www/trinis.fourmi-tek.org/application/controllers/AuthController.php on line 76 and defined in /var/www/trinis.fourmi-tek.org/library/Zend/Auth.php on line 115
apparemment cela viendrais de l'argument $adapter...
Mais je ne comprend pas trop pourquoi.

Voici le code de mon contrôleur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 
<?php
class AuthController extends Zend_Controller_Action
{
	public function getForm()
	{
		return new Application_Form_Login(array(
		'action' => '/auth/process',
		'method' => 'post',
		));
	}
 
	public function getAuthAdapter(array $params)
	{
		$params= new Application_Form_Login;
		$config = new Zend_Config_Ini(APPLICATION_PATH. '/configs/application.ini', 'production');
 
		$db = new Zend_Db_Adapter_Pdo_MySql(array(
		'adapter'=>$config->resources->db->adapter,
		'host'=>$config->resources->db->params->host,
		'username'=>$config->resources->db->params->username, 
		'password'=>$config->resources->db->params->password,
		'dbname'=> $config->resources->db->params->dbname));
 
		$adapter = new Zend_Auth_Adapter_DbTable(
		$db,
		        	'users',
		        	'username',
		        	'password',
		        	'MD5(CONCAT(?, password_salt))'
		);
 
		$adapter->setIdentity($params->getValue('username'));
		$adapter->setCredential($params->getValue('password'));
	}
 
 
	public function preDispatch()
	{
		if (Zend_Auth::getInstance()->hasIdentity()) {
			// Si l’utilisateur est identifié, nous ne souhaitons pas voir le formulaire d’authentification;
			// cependant, l’action de déconnexion devrait toujours rester disponible.
			if ('logout' != $this->getRequest()->getActionName()) {
				$this->_helper->redirector('index', 'index');
			}
		} else {
			// If they aren’t, they can’t logout, so that action should
			// redirect to the login form
			if ('logout' == $this->getRequest()->getActionName()) {
				$this->_helper->redirector('index');
			}
		}
	}
 
	public function indexAction()
	{
		$this->view->form = $this->getForm();
	}
 
	public function processAction()
	{
		$request = $this->getRequest();
		// Vérifier que nous avons bien à faire à une requête POST
		if (!$request->isPost()) {
			return $this->_helper->redirector('index');
		}
		// Récupérons le formulaire et validons le
		$form = $this->getForm();
		if (!$form->isValid($request->getPost())) {
			// Entrées invalides
			$this->view->form = $form;
			return $this->render('index'); // rechargeons le formulaire
		}
		// Récupérons notre adaptateur d’authentification et vérifions les identifiants
		$adapter = $this->getAuthAdapter($form->getValues());
		$auth = Zend_Auth::getInstance();
		$result = $auth->authenticate($adapter);
		if (!$result->isValid()) {
			// Identifiants invalides
			$form->setDescription('Invalid provided');
			$this->view->form = $form;
			return $this->render('index'); // rechargeons le formulaire
		}
		// Nous sommes authentifiés, redirection vers la page d’accueil
		$this->_helper->redirector('index', 'index');
	}
 
	public function logoutAction()
	{
		Zend_Auth::getInstance()->clearIdentity();
		$this->_helper->redirector('index'); // Retournez à la page de login
	}
 
}
Merci de vos réponse,
cordialement,
choco
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 18h06   #2
Membre actif
 
Homme Ahmed Benlahsen
Ingenieur BI - Dev Web Senior
Inscription : décembre 2009
Messages : 118
Détails du profil
Informations personnelles :
Nom : Homme Ahmed Benlahsen
Localisation : Maroc

Informations professionnelles :
Activité : Ingenieur BI - Dev Web Senior

Informations forums :
Inscription : décembre 2009
Messages : 118
Points : 157
Points : 157
Envoyer un message via MSN à abenlahsen Envoyer un message via Skype™ à abenlahsen
Salut @chocofusee,

L'erreur vient du faite que ta fonction getAuthAdapter ne retourne rien !!
Tu dois ajouter la ligne

Enjoy!
abenlahsen est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2011, 19h16   #3
Invité de passage
 
Homme Mathieu
Inscription : août 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 13
Points : 1
Points : 1
Effectivement, j'avais pas fait attention.
Par contre, nouvelle erreur :
Code :
A value for the identity was not provided prior to authentication with Zend_Auth_Adapter_DbTable
Edit : j'ai trouver le problème, cela venait de mon adapter.
Je vous le poste, si cela peut aider quelqu'un :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
public function getAuthAdapter(array $params)
	{
		$config = new Zend_Config_Ini(APPLICATION_PATH. '/configs/application.ini', 'production');
 
		$db = new Zend_Db_Adapter_Pdo_MySql(array(
		'adapter'=>$config->resources->db->adapter,
		'host'=>$config->resources->db->params->host,
		'username'=>$config->resources->db->params->username, 
		'password'=>$config->resources->db->params->password,
		'dbname'=> $config->resources->db->params->dbname));
 
		$adapter = new Zend_Auth_Adapter_DbTable($db);
		$adapter->setTableName("users");
		$adapter->setCredentialColumn("password");
		$adapter->setIdentityColumn("username");
 
		$adapter->setIdentity($params["username"]);
		$adapter->setCredential(md5($params["password"]));
 
		return $adapter;
 
	}
chocofusee est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h43.


 
 
 
 
Partenaires

Hébergement Web