DokuWiki

It's better when it's simple

Outils pour utilisateurs

Outils du site


fr:devel:working_example_of_trustexternal
no way to compare when less than two revisions

Différences

Ci-dessous, les différences entre deux révisions de la page.


fr:devel:working_example_of_trustexternal [2018-01-15 10:53] (Version actuelle) – créée alskar
Ligne 1: Ligne 1:
 +====== Exemple d’implémentation pour trustExternal() ======
  
 +Voici les détails dont vous avez besoin de savoir pour éclaircir la documentation :
 +  - La fonction trustExternal() sera appelée à chaque chargement de page. Cependant, les paramètres //$user// et //$pass// ne sont non vide (ou non null?) que lorsque l'utilisateur se connecte pour la première fois. Sur tous les chargements de page suivants, ils seront vides (ou null?).
 +  - Vous devez remplir le tableau //$USERINFO// (name, mail et grps) pour chaque chargement de page.
 +
 +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.
 +
 +<code php auth_mongodb.class.php>
 +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;
 + }
 +
 + }
 +}
 +</code>
fr/devel/working_example_of_trustexternal.txt · Dernière modification : 2018-01-15 10:53 de alskar

Sauf mention contraire, le contenu de ce wiki est placé sous les termes de la licence suivante : CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki