gpt4 book ai didi

database - 需要帮助调试 Moodle 的自定义身份验证插件

转载 作者:搜寻专家 更新时间:2023-10-30 23:24:22 25 4
gpt4 key购买 nike

我正在尝试根据我网站(基于 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 Debug模式 - 但这也无济于事。当我从服务器设置启用调试输出时,错误消息在页眉之前发送。因此登录页面根本不会显示。

我关闭了所有其他形式的身份验证(无法关闭的手动身份验证除外)和我自己的身份验证。

关于如何解决这个问题有什么想法吗?

最佳答案

您能否确认身份验证插件的显示顺序?这将决定它们的使用顺序。看..

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

无论哪种方式,您所看到的行为都表明您的代码正在返回 false 并且通过此处描述的逻辑失败...

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

...还有这里...

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

...开始了。

您是否尝试过始终从您的插件返回“true”以确保它被调用。然后,您可以开始根据其他内容(硬编码用户名等)返回“true”。这种方法将使您能够到达继续失败或看到更多有针对性的失败的地步。例如,您确定是 user_login 函数失败了,而不是后续对 update_user_record 的调用失败了吗?

最后,您确定生成加盐密码的方式与最初创建密码的方式完全相同吗?对我来说,这将是问题最可能的原因。您能否控制加盐密码的创建,以便您同时拥有新用户的创建和用户身份验证 - 这将确保您与加盐密码和哈希的生成方式保持同步。

关于database - 需要帮助调试 Moodle 的自定义身份验证插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com