Not logged in. · Lost password · Register
Forum: Non-English Discussion French discussion RSS
Dokuwiki et MyBB
Avatar
spyto #1
Member since Jul 2007 · 2 posts
Group memberships: Members
Show profile · Link to this post
Subject: Dokuwiki et MyBB
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");
  }
}
This post was edited on 2007-07-15, 21:55 by spyto.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Imprint
This board is powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2015 by Yves Goergen
Current time: 2020-02-26, 15:30:24 (UTC +01:00)