У меня есть сайт C5, на котором мне нужно программно создавать учетные записи пользователей. Я использовал метод register класса UserInfo, который, кажется, работает. Проблема в том, что ни один из пользователей, созданных таким способом, не может войти в систему, страница входа в C5 просто возвращает «Неверный адрес электронной почты или пароль».
Я проверил, и они отображаются в таблице пользователей. Я попытался скопировать хэш пароля для пользователя, который может войти в систему, но созданный программным путем пользователь все еще не может войти в систему. Я также спросил другого разработчика, которого я знаю, и после просмотра кода говорит, что он практически идентичен тому, как он сделал это в прошлом. На данный момент я немного озадачен тем, как двигаться дальше с устранением неполадок.
Если это имеет значение, сайт настроен на использование адресов электронной почты вместо имен пользователей для входа в систему.
//name = guy incognito \ both passed in
//email = [email protected] \ 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);
Вот снимок экрана записи, созданной в пользовательской таблице:
http://i.stack.imgur.com/N1ebw.png (к сожалению, мне не хватает репутации, чтобы публиковать изображения напрямую)
Изменить — 19/09/2014
Поработав над этим немного дальше, я отследил проблему до функции checkPassword сторонней библиотеки phpass, которую использует C5. Хэш, который он генерирует при проверке во время входа в систему, отличается от хэша, сгенерированного во время создания учетной записи.
хэш создания аккаунта = $ 2a $ 12 $ 6UZ // BGdH6sO2AhfykvyHOLfzR2ADOuQVnzcFu6P9FckbJ56Y40WW
хэш попытки входа в систему = $ 2a $ 12 $ 6UZ // BGdH6sO2AhfykvyHOoxM727vGVnxo.3VsFYwDjKUM13SJqtO
Посмотрев на конкретные / 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);
Других решений пока нет …