2009-11-16 5 views
1

J'essaye de m'authentifier par rapport à la base de données utilisateur de mon site web (CMS) et utilise une approche légèrement différente pour stocker les mots de passe hachés. Il utilise un sel généré aléatoirement pour chaque utilisateur. Le sel est stocké dans l'utilisateur db avec les mots de passe hachés. Par conséquent, l'authentification directe mappée sur le terrain (comme le fait le External DB plugin) ne fonctionnera pas pour moi. Pour commencer, j'ai simplement mis en miroir le plugin DB et modifié la procédure user_login() pour lire le mot de passe haché et le sel de la base de données, puis hacher à nouveau le mot de passe avec le mot de passe dans la base de données . Voici le code de ma fonction user_login()Besoin d'aide pour déboguer un plugin d'authentification personnalisé pour Moodle

function user_login($username, $password) { 

    global $CFG; 

    $textlib = textlib_get_instance(); 
    $extusername = $textlib->convert(stripslashes($username), 'utf-8', $this->config->extencoding); 
    $extpassword = $textlib->convert(stripslashes($password), 'utf-8', $this->config->extencoding); 

    $authdb = $this->db_init(); 

    // normal case: use external db for passwords 

    // Get user data 
    $sql = "SELECT 
      * 
      FROM {$this->config->table} 
      WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."' "; 

    $authdb->SetFetchMode(ADODB_FETCH_ASSOC); 

    // No DB Connection 
    if (!$rs = $authdb->Execute($sql)) { 
     $authdb->Close(); 
     print_error('auth_dbcantconnect','auth'); 
     return false; 
    } 

    // No records returned 
    if($rs->EOF) { 
     $rs->Close(); 
     $authdb->Close(); 
     return false; 
    } 

    // Get password 
    $db_password = $rs->fields['user_password']; 
    $salt = $rs->fields['user_salt']; 

    // Close DB Conn 
    $rs->Close(); 
    $authdb->Close(); 

    // Return match 
    return sha1($extpassword . $salt) == $db_password; 

} 

Mais lorsque je tente de se connecter, nom d'utilisateur/mot de passe correspondant à la base de données site (CMS) échouent. Cependant, le mot de passe (pour le même utilisateur) qui a été stocké dans Moodle plus tôt (avant que j'aie essayé d'employer ce plugin fait sur commande) me fait passer. Cela signifie que ma routine d'authentification est défaillante ou que le mécanisme d'authentification basé sur la base de données interne de moodle a priorité sur celui-ci.

J'ai activé mode de débogage ADODB - mais cela n'aide pas non plus. Lorsque j'active la sortie de débogage à partir des paramètres du serveur, les messages d'erreur sont envoyés avant les en-têtes de page. Ainsi, la page de connexion ne s'affichera pas du tout.

Toutes les autres formes d'authentification sont désactivées (à l'exception du mode manuel qui ne peut pas être désactivé) et les miennes.

Des idées pour résoudre ce problème?

Répondre

2

Pouvez-vous confirmer l'ordre dans lequel les plug-ins d'authentification sont affichés? Cela déterminera l'ordre dans lequel ils sont utilisés. Voir ..

http://docs.moodle.org/en/Manage_authentication

De toute façon, le comportement que vous voyez suggère que votre code est faux retour et la chute par la logique décrite ici ...

http://moodle.org/mod/forum/discuss.php?d=102070

... et ici ...

http://docs.moodle.org/en/Development:Authentication_plugins

... est PASSENT.

Avez-vous essayé de toujours retourner "vrai" de votre plugin pour vous assurer qu'il est appelé. Ensuite, vous pouvez commencer à retourner "vrai" en fonction d'autres choses (noms d'utilisateurs codés en dur, etc.). Cette approche vous permettra d'arriver au point où vous continuez à échouer ou à voir plus d'échecs ciblés. Êtes-vous sûr, par exemple, que c'est la fonction user_login et non l'appel suivant à update_user_record qui échoue? Enfin, êtes-vous sûr de générer le mot de passe salé de la même manière qu'il a été créé en premier lieu? Ce serait, pour moi, la cause la plus probable du problème. Pouvez-vous prendre le contrôle de la création du mot de passe salé de sorte que vous possédez à la fois la création de nouveaux utilisateurs et l'authentification des utilisateurs - ceci assurerait que vous étiez synchronisé avec la façon dont le mot de passe salé et le hash ont été générés.

+0

Merci pour votre réponse ...Je vais passer par vos suggestions étape par étape et revenir à vous .. –

+0

Bonjour. J'ai essayé de retourner "vrai" toujours et a également commenté le bloc de code entier pour update_user_record(). Cependant, je continue à recevoir des informations de connexion incorrectes. En ce qui concerne l'ordre des plugins auth, c'est 1. Manual Accounts, 2. Nologin et 3. mon plugin custom. Je ne vois pas une option pour changer l'ordre du plugin ici ... bien qu'il y ait une colonne intitulée Up/Down dans le tableau, la colonne ne contient rien. Aucune suggestion ? –

+0

Oublié de mentionner: L'option "auth" dans la table mdl_config est définie à mon plugin cependant. –

Questions connexes