spyto
Salut,
J'ai installé Dokuwiki et je voudrais utiliser les données de ma base MyBB pour l'authentification et l'enregistrement.
J'ai donc essayé d'écrire un "Authentication Backend class" en m'inspirant de punbb.class.php et en suivant les conseils du site wiki.splitbrain.org...
Mais ça buggue !!!
Voici ci-dessous le code que j'ai écrit.
Les problèmes:
1- Il faut s'y reprendre à deux fois pour se logger.
2- Une fois loggé, l'affichage de Dokuwiki est perturbé:
- pas de lien (ni de bouton) "connexion"/"déconnexion".
- j'utilise le template "monobook": affichage des onglets incorrect.
- le menu de gauche n'est plus affiché !
- de plus, je ne sais pas trop comment gérer les groupes ! (l'admin n'est même pas reconnu!!!)
Note: dans MyBB, la table "users" contient un champ numérique 'gid' (numéro de groupe).
Et dans la table "usergroups", on retrouve ce champ 'gid' avec le nom du groupe dans le champ "title".
Quelqu'un aurait-il par hasard écrit un backend pour MyBB ? Ou simplement un lien contenant une info à ca sujet...
(Je ne trouve rien sur Google)..
Merci pour votre aide.
-------------------
mon inc/local.php:
-------------------
$conf['title'] = 'Mon Wiki';
$conf['lang'] = 'fr';
$conf['template'] = 'monobook';
$conf['dformat'] = 'd/m/Y H:i';
$conf['useacl'] = 1;
$conf['authtype'] = 'mybb';
$conf['superuser'] = '@admin';
$conf['htmlok'] = 1;
$conf['phpok'] = 1;
$conf['tpl']['monobook']['mb_bc_loc'] = 'top';
$conf['tpl']['monobook']['mb_hbc_loc'] = 'top';
----------------------------------------------
et mon fichier dokuwiki/inc/auth/mybb.class.php |
(basé sur auth_basic)
----------------------------------------------
<?php
/**
* MyBB auth backend
*
* Uses external Trust mechanism to check against MyBB's
* user cookie.
*
*/
// necessary to access MyBB vars & functions
define("IN_MYBB", 1);
// get (and save) current dir
$cwd = getcwd();
// change dir to MyBB forum to init vars é functions
// modify below to point to MyBB forum folder:
chdir('../MyBB'); // path to MyBB
// required MyBB includes
require_once 'global.php';
require_once 'inc/config.php';
require_once "inc/functions_user.php";
// back to to current dir
chdir($cwd);
// based on auth_basic
define('DOKU_AUTH', dirname(__FILE__));
require_once(DOKU_AUTH.'/basic.class.php');
#dbg($GLOBALS);
#dbg($mybb->user);
class auth_mybb extends auth_basic {
/**
* Constructor.
*
* Sets additional capabilities and config strings
*/
function auth_mybb(){
// to use trustExternal and Logoff
$this->cando['external'] = true;
$this->cando['logoff'] = true;
}
/**
* Just checks against the $mybb->user variable
*/
function trustExternal($user,$pass,$sticky=false){
global $USERINFO, $conf; // docuwiki
global $mybb, $db, $config; // MyBB
$sticky ? $sticky = true : $sticky = false; //sanity check
// someone used the login form
if(!empty($user)){
// use of MyBB internal function to validate password
$user = validate_password_from_username($user,$pass);
if(!$user['uid']){
//invalid credentials - log off
auth_logoff();
return false;
}
// password is OK, setting cookie...
my_setcookie('loginattempts', 1);
$db->delete_query(TABLE_PREFIX."sessions", "ip='".$db->escape_string($session->ipaddress)."' AND sid != '".$session->sid."'");
$newsession = array(
"uid" => $user['uid'],
"loginattempts" => 1,
);
$db->update_query(TABLE_PREFIX."sessions", $newsession, "sid='".$session->sid."'");
// Temporarily set the cookie remember option for the login cookies
$mybb->user['remember'] = $user['remember'];
my_setcookie("mybbuser", $user['uid']."_".$user['loginkey'], null, true);
my_setcookie("sid", $session->sid, -1, true);
}
if(isset($mybb->user['uid'])){
// okay we're logged in - set the globals
$USERINFO['pass'] = $mybb->user['password'];
$USERINFO['name'] = $mybb->user['username'];
$USERINFO['mail'] = $mybb->user['email'];
$USERINFO['grps'] = array('@user', '@admin'); // là, je ne sais pas comment faire, juste pour tester...
$_SERVER['REMOTE_USER'] = $mybb->user['username'];
$_SESSION[DOKU_COOKIE]['auth']['user'] = $mybb->user['username'];
$_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
return true;
}
// to be sure
auth_logoff();
return false;
}
/**
* remove cookie on logout
*/
function logOff(){
global $mybb;
my_unsetcookie("mybbuser");
my_unsetcookie("sid");
}
}