- 1
[Opened] [Résolu] Utilisation du driver « Class » de jAuth
Posted by Powermanga on 05/05/2009 11:29
Bonjour,
J'essaie d'utiliser le driver « Class » de jAuth, mais après une authentification j'ai une erreur :
jAuth::isConnected() [<a href='function.jAuth-isConnected'>function.jAuth-isConnected</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "jAuthUserTLK" 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 /var/www/mon-site.com/lib/jelix/auth/jAuth.class.php 315
La ligne en question est la suivante :
return (isset($_SESSION[$config['session_name']]) && $_SESSION[$config['session_name']]->login != '');
Dans le fichier « monApplication/var/config/auth.coord.ini.php » j'ai bien déclaré ma classe :
driver= Class class = "monModule~monAuthDriver"
J'ai créé deux fichiers dans le répertoire « monApplication/modules/monModule/classes » :
Le fichier « jAuthUserAMoi.class.php »
<?php class jAuthUserAMoi extends jAuthUser { } ?>
Le fichier « monAuthDriver.class.php »
<?php class monAuthDriver implements jIAuthDriverClass { ... public function getByLoginPassword($login, $cryptedpassword) { ... if (!empty($res)) { $user = jClasses::createInstance('jAuthUserAMoi'); $user->id = $res->mon_id; $user->login = $res->mon_loing; $user->password = $res->mon_password; $user->email = $res->mon_email; return $user; } else { return; } } ... } ?>
Ma variable $_SESSION ressemble à ça :
default array ( 'JX_LANG' => 'fr_FR', 'JELIX_USER' => __PHP_Incomplete_Class::__set_state(array( '__PHP_Incomplete_Class_Name' => 'jAuthUserAMoi', 'login' => 'mon_login', 'email' => 'email@domain.com', 'id' => '1', 'password' => 'mon_password', )), ...
À noter que l'authentification fonctionne bien avec un driver « Db ».
Je dois mal faire quelque chose mais quoi ? A première vue PHP n'arrive pas à instancier ma classe « jAuthUserAMoi ». Dois-je la déclarer quelque part ?
Si quelqu'un à une idée ? Merci.
[Opened] Re: Utilisation du driver « Class » de jAuth
Posted by Powermanga on 05/06/2009 11:24
C'est bien ce que je pensais PHP n'arrive pas à instancier ma classe « jAuthUserAMoi ».
J'ai contourné le problème en déclarant :
class jAuthUserAMoi extends jAuthUser { }
dans le fichier « application.init.php »
Et en remplaçant la ligne :
$user = jClasses::createInstance('jAuthUserAMoi');
par la ligne :
$user = new jAuthUserAMoi();
Est-ce acceptable comme solution ? Ou existe-il une manière plus « propre », plus conforme avec Jelix ? À quand un « Jelix Best Practices » ;-)
[Opened] Re: Utilisation du driver « Class » de jAuth
Posted by laurentj on 05/06/2009 11:30
Salut,
Je n'ai pas trop le temp d'investiguer à fond, mais à première vue, déjà il manque le module dans ce selecteur :
jClasses::createInstance('jAuthUserAMoi');
ça peut poser des problèmes si c'est appelé via d'autres modules.
Mais, maintenant, peut être manque t il tout simplement un include de ta classe user avant que la session démarre. voir le chapitre sur les classes metiers (version 1.1) pour indiquer les classes à charger avant le session_start.
Detruit ton cookie de session avant de refaire des tests...
[Opened] Re: Utilisation du driver « Class » de jAuth
Posted by Powermanga on 05/06/2009 12:06
Merci Laurent pour tes réponses.
Cela ne change rien en précisant le sélecteur :
jClasses::createInstance('monModule~jAuthUserAMoi');
Cependant cela fonctionne effectivement comme tu l'indiques en insérant dans la section « sessions » du fichier « var/config/defaultconfig.ini.php » la ligne :
[sessions] loadClasses = "monModule~jAuthUserAMoi"
Merci encore :-)
- 1