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