Voici les détails dont vous avez besoin de savoir pour éclaircir la documentation :
Donc, une solution est de vérifier d'abord la variable $_SESSION de la connexion précédente. Si elle est trouvé, remplir le tableau $USERINFO et retourner true. Sinon, utiliser la base de données pour trouver l'identifiant.
Voici une solution complète. Cet exemple vérifie une base de données mongodb, mais il est possible de changer facilement ceci pour utiliser n'importe quel autre type de base.
class auth_mongodb extends auth_basic { var $connection = null; function __construct() { global $config_cascade; global $connection; $this->cando['external'] = true; $this->cando['logout'] = true; $connection = new Mongo("server_ip"); } function trustExternal($user, $pass, $sticky = false) { global $USERINFO; global $conf; global $connection; $sticky ? $sticky = true : $sticky = false; //sanity check if (!empty($_SESSION[DOKU_COOKIE]['auth']['info'])) { $USERINFO['name'] = $_SESSION[DOKU_COOKIE]['auth']['info']['user']; $USERINFO['mail'] = $_SESSION[DOKU_COOKIE]['auth']['info']['mail']; $USERINFO['grps'] = $_SESSION[DOKU_COOKIE]['auth']['info']['grps']; $_SERVER['REMOTE_USER'] = $_SESSION[DOKU_COOKIE]['auth']['user']; return true; } if (!empty($user)) { // vérification en base $collection = $connection->DatabaseName->admins; $login = $collection->findOne(array('name' => $user)); if ($login == null) return false; if ($login['password'] != sha1($login['_id'] . $pass)) { msg('Incorrect username or password.'); return false; } // definir les varaible global $USERINFO['name'] = $login['name']; $USERINFO['mail'] = $login['email']; $USERINFO['grps'] = $login['name'] == 'Admin' ? array('admin','user'): array( 'user'); $_SERVER['REMOTE_USER'] = $login['name']; $_SESSION[DOKU_COOKIE]['auth']['user'] = $login['name']; $_SESSION[DOKU_COOKIE]['auth']['mail'] = $login['email']; $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass; $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO; return true; } else { return false; } } }