Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [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 &quot;jAuthUserTLK&quot; 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

Reply #1 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

Reply #2 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

Reply #3 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 :-)

 
Page
  1. Re: Utilisation du driver « Class » de jAuth