- 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

