Интеграция Joomla 1.6 с порталом на базе PHP

После разработки сайта на Joomlа возникает необходимость интеграции других порталов, которые должны использовать единое пространство данных авторизации. В этом случае речь пойдет об общей базе данных пользователей Joomla и выборке параметров аутентификации.

Задача. Создать модуль авторизации портала на базе PHP, используя базу данных пользователей Joomla.

Решение

Трудность решения этой задачи заключается в изменненом алгоритме вычисления хэша пароля, хранимого в таблице базы данных Joomla (по умолчанию jos_users). Хеш пароля состоит из двух частей, разделенных символом ":".

Привожу пример типового кода, который позволяет правильно определить хеш с "солью". 

<form action='login.php' method='post' name='login'>
 <b>User:<b> <input type=text name='username' maxlength=15 width=18><br/> <b>Password:<b> <input type=password name='password' maxlength=15 width=18><br/>
 <input type=submit value='Login'> 
</form>
<?php
 $dbaddress='localhost'; $dbuser='root'; $dbpass='root'; $dbname='yourdatabase';
 
$dbcnx = mysql_connect($dbaddress,$dbuser,$dbpass)
or die("Could not connect: " . mysql_error());
mysql_select_db($dbname, $dbcnx) or die ('Unable to select the database: ' . mysql_error());
$query = mysql_query("select password from jos_users where username = \"" . $_POST["username"] . "\"")
or die("Unable to validate login and password with the database:" . mysql_error());
$result = mysql_fetch_array($query);
$result = $result[0];
$parts = explode( ':', $result);
// Check if password is md5-ed with or without salt
 if (count($parts) < 2) $new_password = md5($_POST["password"]); 
 else {
 $salt = $parts[1];
 
 // convert the raw password to md5(password+salt):salt model
 $new_password = md5($_POST["password"] . $salt) . ":" . $salt; 
 } 
 if ($new_password != $result)
 {
 echo "no login"; // your params
 }
 else
 {
 echo "successful validation"; // your params
 }
?>