вот так вот...
Нужно было сделать авторизацию пользователя при смене пароля.
Добавил в шаблон system.auth.changepasswd в блок вывода сообщения следующее:[CODE]if ($arParams["~AUTH_RESULT"]["TYPE"] == "OK" && $arResult["LAST_LOGIN"] != '') { // если все хорош
// и пароль сменен
$LOGIN = $arResult["LAST_LOGIN"];
$PASSWORD = $arResult["USER_PASSWORD"];
$arFilter = Array(
'LOGIN' => $LOGIN,
);
$rsUsers = CUser::GetList(($by='personal_country'), ($order='desc'), $arFilter); // получаем пользователя по логину
if ($arUser = $rsUsers->Fetch()) {
if ($LOGIN == $arUser['LOGIN']) { // Убедимся что выбрали именно того пользователя которого хотели
global $USER;
if (!is_object($USER)) $USER = new CUser;
$arAuthResult = $USER->Login($LOGIN, $PASSWORD, "Y"); // авторизуем его используя логин и пароль
$APPLICATION->arAuthResult = $arAuthResult;
$success = ($arAuthResult == 1);
print('<pre>'.print_r((array)$arAuthResult,true).'</pre>');
print('<pre>'.print_r((array)$arResult,true).'</pre>');
if($success):?>
<p class="message">
Вы будете перенаправлены на страницу личного кабинета <span class="when">через <span class="countdown">25</span> сек</span>.<br>
Нажмите <a href="/personal/">здесь</a> если не хотите ждать или это не происходит автоматически.
</p>
<sc ript>
setInterval(function(){
var $cd = $(".countdown");
if ($cd.length > 0) {
var count = parseInt($cd.text())-1;
if (count > 0) {
$cd.text(count);
} else {
$('.when').text('прямо сейчас');
}
$cd.text(parseInt($cd.text())-1);
}
},1000);
setTimeout(function(){
window.location.href = "/personal/";
}, 25000);
</sc ript>
<?endif;
}
}
}
[/CODE]В $arAuthResult у меня возвращается единица - так как будто USER->Login авторизует. Но по факту пользователь остается неавторизованным.
Я так понимаю не проставляется кука. Почему? Если я делаю это в рамках обычной страницы - а не в шаблоне - все работает на ура.
Что я делаю не так?
Нужно было сделать авторизацию пользователя при смене пароля.
Добавил в шаблон system.auth.changepasswd в блок вывода сообщения следующее:[CODE]if ($arParams["~AUTH_RESULT"]["TYPE"] == "OK" && $arResult["LAST_LOGIN"] != '') { // если все хорош
// и пароль сменен
$LOGIN = $arResult["LAST_LOGIN"];
$PASSWORD = $arResult["USER_PASSWORD"];
$arFilter = Array(
'LOGIN' => $LOGIN,
);
$rsUsers = CUser::GetList(($by='personal_country'), ($order='desc'), $arFilter); // получаем пользователя по логину
if ($arUser = $rsUsers->Fetch()) {
if ($LOGIN == $arUser['LOGIN']) { // Убедимся что выбрали именно того пользователя которого хотели
global $USER;
if (!is_object($USER)) $USER = new CUser;
$arAuthResult = $USER->Login($LOGIN, $PASSWORD, "Y"); // авторизуем его используя логин и пароль
$APPLICATION->arAuthResult = $arAuthResult;
$success = ($arAuthResult == 1);
print('<pre>'.print_r((array)$arAuthResult,true).'</pre>');
print('<pre>'.print_r((array)$arResult,true).'</pre>');
if($success):?>
<p class="message">
Вы будете перенаправлены на страницу личного кабинета <span class="when">через <span class="countdown">25</span> сек</span>.<br>
Нажмите <a href="/personal/">здесь</a> если не хотите ждать или это не происходит автоматически.
</p>
<sc ript>
setInterval(function(){
var $cd = $(".countdown");
if ($cd.length > 0) {
var count = parseInt($cd.text())-1;
if (count > 0) {
$cd.text(count);
} else {
$('.when').text('прямо сейчас');
}
$cd.text(parseInt($cd.text())-1);
}
},1000);
setTimeout(function(){
window.location.href = "/personal/";
}, 25000);
</sc ript>
<?endif;
}
}
}
[/CODE]В $arAuthResult у меня возвращается единица - так как будто USER->Login авторизует. Но по факту пользователь остается неавторизованным.
Я так понимаю не проставляется кука. Почему? Если я делаю это в рамках обычной страницы - а не в шаблоне - все работает на ура.
Что я делаю не так?