concrete5程序创建的用户can';t登录


concrete5 programmatically created user can't log in

我有一个C5站点,我需要在其中以编程方式创建用户帐户。我所做的是使用UserInfo类的register方法,它似乎可以工作。问题是,以这种方式创建的用户都无法登录,C5登录页面只返回"无效的电子邮件地址或密码"

我已经检查过了,它们显示在用户表中。我曾尝试为可以登录的用户复制密码哈希,但程序创建的用户仍然无法登录。我还询问了我认识的另一位开发人员,在查看了代码后,他说这实际上与他过去的做法完全相同。在这一点上,我有点困惑于如何继续进行故障排除。

如果有区别,则将网站设置为使用电子邮件地址而不是用户名进行登录。

//name = guy incognito      ' both passed in
//email = 1234@5678.com      ' via POST
function getRandomString($length) {
    $seed = chr(mt_rand(97 ,122)).substr(md5(time( )), 1);
    $rand = "";
    for($y = 0; $y <= $length; $y++) {
        $rand .= substr($seed, rand(0, strlen($seed)), 1);
    }
    return $rand;
}
$pswd = getRandomString(8);
$userData['uName'] = md5($name . rand(1, 1000) . date('Y-m-d H:i:s'));
$userData['uEmail'] = $email;
$userData['uPassword'] = $pswd;
$userData['uPasswordConfirm'] = $pswd;
$ui = UserInfo::register($userData);

以下是在用户表中创建的条目的截屏:https://i.stack.imgur.com/N1ebw.png(不幸的是,我缺乏直接发布图像的声誉)

编辑-2014年9月19日

经过进一步的研究,我已经将问题追溯到C5正在使用的第三方phpass库的checkPassword函数中。它在登录期间检查时生成的哈希与创建帐户时生成的散列不同。

账户创建哈希=$2a$12$6UZ//BGdH6sO2AhykvyHOLFzR2ADOuQVnzcFu6p9FckbJ56Y40WW登录尝试哈希=$2a$12$6UZ//BGdH6sO2AhfyvyHOoxM727vGVnxo.3VsFYwDjKUM13SJqtO

在查看了concrete/core/dashboard/users/add.php之后,我注意到他们注册用户的方式略有不同。在这里,他们没有传递密码确认,而是指定默认语言,最明显的是,他们没有调用UserInfo::Register,而是调用UserInfo::Add。

在更新我的代码以反映它是如何完成的之后,事情就开始工作了。备案:

$uName = md5($_POST['repName'] . rand(1, 1000) . date('Y-m-d H:i:s'));              
$data = array('uName' => $uName, 'uPassword' => $authCode, 'uEmail' => $_POST['repEmail'], 'uDefaultLanguage' => 'En');
$ui = UserInfo::add($data);