Imaginons que vous ayez un site sous MediaWiki 1.5, et que vous voulez utiliser sa base de donnée d'utilisateurs pour limiter l'accès à une page de votre conception aux seuls personnes ayant un compte sous votre Wiki. Voici la fonction PHP que j'ai utilisée dans ce cas de figure :
$wgPasswordSalt = true;
function identification($login, $password)
{
$connexion = mysql_pconnect($serveur_mysql, $login_mysql, $pass_mysql);
@mysql_select_db($nom_base_mysql);
$requete = "SELECT user_id, user_password FROM user WHERE user_name = '" . $login . "'";
$results = mysql_query($requete, $connexion);
$nb_results = mysql_num_rows($results);
if($nb_results == 0)
{
//auth pas ok
mysql_free_result($results);
return "Nom d'utilisateur ou mot de passe incorrect.";
}
else
{
$dict = mysql_fetch_assoc($results);
$db_passwd = $dict["user_password"];
$db_id = $dict["user_id"];
mysql_free_result($results);
$enc_passwd = wfEncryptPassword($db_id, $password);
if (strcmp($enc_passwd, $db_passwd) == 0)
{
//auth ok
return "ok";
}
else
{
return "Nom d'utilisateur ou mot de passe incorrect. ";
}
}
}
function wfEncryptPassword( $userid, $password )
{
global $wgPasswordSalt;
$p = md5( $password);
if($wgPasswordSalt)
return md5( "{$userid}-{$p}" );
else
return $p;
}
====================================================
---
layout: default
title: Réutiliser-les-mots-de-passe-SPIP
---
Imaginons que vous ayez un site sous SPIP, et que vous voulez utiliser sa base de donnée d'utilisateurs pour limiter l'accès à une page de votre conception aux seuls personnes ayant un compte SPIP. Voici la fonction PHP que j'ai utilisée dans ce cas de figure :
function identification($login, $password)
{
$connexion = mysql_pconnect($serveur_mysql, $login_mysql, $pass_mysql);
@mysql_select_db($nom_base_mysql);
$requete = "SELECT login FROM spip_auteurs WHERE login = '" . $login . "'" . ' AND pass = md5( CONCAT(alea_actuel,"' . $password . '"))';
$results = mysql_query($requete, $connexion);
$nb_results = mysql_num_rows($results);
if($nb_results == 0)
{
//ident pas ok
mysql_free_result($results);
return "Nom d'utilisateur ou mot de passe incorrect. ( $login , $password )";
}
else
{
//auth ok
mysql_free_result($results);
return "ok";
}
}
Je suppose qu'il est certainement bien mieux d'envoyer l'aléa actuel dans le formulaire de saisie du mot de passe, et de calculer le MD5 coté client avec Javascript, afin que le mot de passe ne circule pas en clair.