Я пытаюсь пройти аутентификацию на уровне пользователя db моего сайта (на основе CMS), и он использует немного другой подход к хранению хешированных паролей. Он использует случайно сгенерированную соль для каждого пользователя. Соль хранится в пользовательской базе данных вместе с хешированными паролями. Следовательно, прямая полевая аутентификация (как плагин Внешняя БД ) не будет работать для меня.
Для начала я просто отразил плагин DB и изменил процедуру user_login()
, чтобы прочитать хешированный пароль и соль из базы данных, а затем снова хэшировать введенный пароль с солью и сопоставить его с паролем в база данных. Вот код для моей user_login()
функции
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;
}
Но когда я пытаюсь войти в систему, имя пользователя / пароль, соответствующие базе данных сайта (CMS), не работают. Тем не менее, пароль (для того же пользователя), который был сохранен в Moodle ранее (до того, как я попытался использовать этот пользовательский плагин), помогает мне.
Это означает, что либо моя процедура аутентификации не работает, либо внутренний механизм аутентификации, основанный на базе данных moodle, имеет приоритет над ней.
Я включил Режим отладки ADODB - но это тоже не помогает. Когда я включаю вывод отладки в настройках Сервера, сообщения об ошибках отправляются до заголовков страниц. Таким образом, страница входа не будет отображаться вообще.
У меня отключены все другие формы аутентификации (кроме «Ручной», которую нельзя отключить) и моя собственная.
Есть идеи, как решить эту проблему?