Неверное контрольное слово для логина
Доброго времени суток!
Есть сайт на битриксе.
На сайте есть страница авторизации /auth/, где вызван компонент bitrix:system.auth.form.
Есть страница для запроса контрольной строки и восстановления пароля ( /forgot/ и /restore/ соответственно).
Для восстановления пароля переходим на страницу /forgot/, где вызван компонент bitrix:system.auth.forgotpasswd, вводим логин или email и жмем отправить — контрольная строка успешно приходит на почту (в базе видим, что у пользователя поменялось значение CHECKWORD т.е. отправленная строка действительно актуальна).
Везде, где выводятся компоненты, поставил шаблоны по умолчанию, во избежание ошибок с моей стороны..
Переходим по ссылке и попадаем в раздел /restore/, где сначала использовался компонент bitrix:system.auth.changepasswd, но по причине не возврата сообщений об ошибках был закомментирован и написан следующий код, который хотя-бы возвращает ошибки:
<?if(($_POST==»Y»)&&($_POST==»CHANGE_PWD»)){ global $USER; $arResult = $USER->ChangePassword($_POST, $_POST, $_POST, $_POST); if($arResult == «OK»){ echo «Пароль успешно изменен.»; }else{ echo $arResult; } } echo ‘<pre>’; print_r($arResult); echo ‘</pre>’; if($arResult != «OK»){ ?> <fo rm method=»post» action=»» name=»bform» id=»b-form»> <input type=»hidden» name=»backurl» value=»»> <input type=»hidden» name=»AUTH_FORM» value=»Y»> <input type=»hidden» name=»TYPE» value=»CHANGE_PWD»> <input type=»text» name=»USER_LOGIN» maxlength=»50″ value=»<?=$_GET?>» class=»bx-auth-input» placeholder=»Ваш логин» /> <input type=»text» name=»USER_CHECKWORD» maxlength=»50″ value=»<?=$_GET?>» class=»bx-auth-input» placeholder=»Контрольная строка»/> <input type=»password» name=»USER_PASSWORD» maxlength=»50″ value=»» class=»bx-auth-input» autocomplete=»off» placeholder=»Новый пароль» /> <input type=»password» name=»USER_CONFIRM_PASSWORD» maxlength=»50″ value=»» class=»bx-auth-input» autocomplete=»off» placeholder=»Подтверждение пароля» /> <div class=»clearfix b-form-buttons»> <input type=»submit» name=»change_pwd» value=»Изменить пароль» /> </div> </form> <?}?>
При успешном вводе нового пароля и его подтверждения (они равны и соответствуют всем правилам) получаю массив $arResult:
Array ( => Неверное контрольное слово для логина «test@mail.ru». => ERROR => CHECKWORD )
На странице, после отправки формы вывожу массив $_POST, что подтверждает, что USER_CHECKWORD все таки передается:
Array ( => => Y => CHANGE_PWD => test@mail.ru => 1a571b5f2170ff4ef7c0657c89befcd8 => PASSWORDtest1!Q => PASSWORDtest1!Q => Изменить пароль )
Посмотрел код метода, такая ошибка возникает если он пуст (не передается) или он не равен хешу пароля из базы:
if($res == » || $res != $salt.md5($salt.$arParams))
НО! Если на странице перед подключением header.php установить значение константы define(«AUTH», true), и запросить пароль посредством выведенной формы, то пароль успешно меняется. WTF?
Уважаемые знатоки, внимание, вопрос: «Из — за чего возникает такая проблема, и как её решить?». Заранее спасибо! Очень надеюсь на помощь…