DokuWiki

It's better when it's simple

Outils pour utilisateurs

Outils du site


Panneau latéral

Cette traduction est plus ancienne que la page originale et est peut-être dépassée. Voir ce qui a changé.
Traductions de cette page?:

Découvrir DokuWiki

Options avancées

Pour les entreprises

Notre Communautée


Suivez-nous sur Facebook, Twitter et les autres résaux sociaux.

Notre politique de confidentialité

fr:devel:working_example_of_trustexternal

Exemple d’implémentation pour trustExternal()

Voici les détails dont vous avez besoin de savoir pour éclaircir la documentation :

  1. 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?).
  2. 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.

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;
		}
 
	}
}
fr/devel/working_example_of_trustexternal.txt · Dernière modification: 2018-01-15 10:53 par alskar