Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour j'essaie de m'authentifier via SpiffyDoctrine en utilisant la session comme storage :
$doctrineAuthAdapter = new \SpiffyDoctrine\Authentication\Adapter\DoctrineEntity( $this->_em, 'Entity\TMembre', $identityColumn, 'password', null ); $doctrineAuthAdapter->setIdentity($identity); $doctrineAuthAdapter->setCredential($password); $authenticationService = new \Zend\Authentication\AuthenticationService(new \Zend\Authentication\Storage\Session()); $authResult = $authenticationService->authenticate($doctrineAuthAdapter);
A la suite de ce code je teste le contenu enregistré en session:
// test $authenticationService = new \Zend\Authentication\AuthenticationService(); $userinfo = $authenticationService->getIdentity(); \Zend\Debug::dump($userinfo); \Zend\Debug::dump($userinfo->getId());
Cela m'affiche bien un object(Entity\TMembre) et un identifiant numérique.
Par contre quand je réalise ce même test dans un autre controller quelconque j'ai :
\Zend\Debug::dump($userinfo) affiche : object(__PHP_Incomplete_Class)...
puis
\Zend\Debug::dump($userinfo->getId()) génère une erreur :
The script tried to execute a method or access a property of an incomplete object.
Please ensure that the class definition "Entity\TMembre" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition
Pourtant dans Module.php de SpiffyDoctrine j'ai bien le code pour charger les entities et j'ai vérifié, il est bien appelé:
public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( __DIR__ . '/autoload_classmap.php', ), 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( 'Entity' => APPLICATION_PATH . '/models/Entity', 'Repository' => APPLICATION_PATH . '/models/Repository', ), ), ); }
J'avais déjà rencontré ce pb avec zf1 et j'avais utilisé le paliatif suivant.
Je sérialisais l'entity avant de l'enregistrer
$myAuth->getStorage()->write(serialize($identity));
Puis je désérialisais pour la récupérer.
Mais à mon avis y'a un truc que je dois pas faire correctement...
Dernière modification par booradley (23-11-2011 11:38:36)
Hors ligne
Je dois partir j'ai pas le temps de lire ton code, mais voici le miens pour l'authentication :
public function authenticate($email, $password) { $adapter = new DoctrineEntity($this->em, 'Application\Model\User', 'email', 'password'); $adapter->setIdentity($email) ->setCredential($this->hash($password)); $result = $adapter->authenticate(); if (!$result->isValid()) { return false; } $user = $result->getIdentity(); $this->authentication->getStorage()->write($user); // On met à jour la date de connexion au passage $user->loggedAt = new \DateTime('now'); $this->em->persist($user); $this->em->flush(); return true; }
Hors ligne
J'ai la même erreur avec ce code.
Mais il a avantage d'appeler directement la méthode write() et donc j'ai adapté ton code comme ceci:
$authenticationService->getStorage()->write(serialize($identity));
Maintenant je n'ai plus qu'a désérialiser et ca marche.
Merci encore bakura!
Hors ligne
De rien ^^. Je crois que tu auras posé des questions sur un peu prés tous les composants nouveaux de ZF 2 ! Bonne nouvelle pour toi : la bêta 2 arrive très très bientôt avec Zend\Mail, Zend\Cache et Zend\Log refait .
Hors ligne
Oui je continue ma migration petit a petit .
J'aurai surement d'autres questions.
Mais soit je suis le seul a avoir des problèmes soit personne en France ne s'intéresse a zf2!!! lol
Hors ligne
Pages: 1