После разработки сайта на 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
}
?>