---

--  ->   Разработка плагинов, вопросы по API  ->  Переход на нужную страницу после авторизации


Раздел для разработчиков. Обсуждение создания плагинов, вопросы и пожелания по API Amiro.CMS



Добавлено: 14.05.14 06:24:42 #1



Регистрация: 04.02.13
Сообщений: 6


Обратиться по имени

Всем доброго времени!

Появилась необходимость сделать так, чтобы при авторизации через спецблок пользователь переходил сразу на страницу /members
А при выходе - тупо кидало на главную страницу.

Реализовал это добавив код в шаблон members.tpl :

<!--#set var="small_menu_change_settings" value="
<a href="##front_link##" ##settings_style##>%%change_settings%%</a>
##if(MEMBER_LOGGED_IN==1)##
##setvar @redirecttoview = RedirectToView()##
##redirecttoview##
##endif##
"-->

А также пару строчек в front_functions.tpl :

function RedirectToView(){
header("Location: /members" );
exit();
}


Все работает прекрасно... Но увы! Начал замечать, что при переходе на главную страницу (где находится этот блок - пользователи) зачастила ошибка 503... Cache lock is timed out. Please try again later.

После разборок с хостингом стало понятно, что причина в сайте.

Как мне реализовать то это безболезненно?
Добавлено: 14.05.14 06:32:34 #2



Регистрация: 04.02.13
Сообщений: 6


Обратиться по имени

Интуиция подсказывает, что есть какой-то более легкий и простой способ где-то в районе самого модуля авторизации, и вообще посмотреть бы как происходит авторизация.
Добавлено: 20.05.14 22:49:32 #3



Регистрация: 04.02.13
Сообщений: 6


Обратиться по имени

Получил ответ от тех.поддержки:
Артём Зарубин
Здравствуйте.
Такой способ редиректа ломает механизм кэширования, отсюда появляется ошибка. Выход: использовать JS-редирект (вместо PHP).

Увы, придется все таки JS редирект:
Шаблон members.tpl:
<!--#set var="small_menu_change_settings" value="
<a href="##front_link##" ##settings_style##>%%change_settings%%</a>
##if(MEMBER_LOGGED_IN==1)##
<script>
window.location.replace("http://мойсайт/members" );
</script>
##endif##
"-->


А это лишняя секунда, или даже две секунды после авторизации((
Добавлено: 26.05.14 16:49:13 #4



Регистрация: 22.10.12
Сообщений: 35


Обратиться по имени

Добавьте в /_local/front_functions.php -

AMI_Event::addHandler('on_after_user_login', 'cstOnAfterUserLogin', AMI_Event::MOD_ANY, AMI_Event::PRIORITY_LOW);
AMI_Event::addHandler('on_before_user_logout', 'cstOnBeforeUserLogout', AMI_Event::MOD_ANY, AMI_Event::PRIORITY_LOW);

function cstOnAfterUserLogin($name, array $aEvent, $handlerModId, $srcModId){
    $url =
        AMI_Registry::get('path/www_root') .
        AMI_PageManager::getModLink(
            'members',
            AMI_Registry::get('lang_data')
        );
    AMI::getSingleton('response')->HTTP->setRedirect($url);

    return $aEvent;
}

function cstOnBeforeUserLogout($name, array $aEvent, $handlerModId, $srcModId){
    AMI_Event::disableHandler('on_before_user_logout');
    $oSession = AMI::getSingleton('env/session');
    $oSession->logout();
    
    $url = AMI_Registry::get('path/www_root');
    $oResponse = AMI::getSingleton('response');
    $oResponse->HTTP->setRedirect($url);
    $oResponse->send();
}

События on_after_user_login, on_before_user_logout пока не задокументированы, ожидаем появление в общем списке событий к следующему обновлению CMS.


Создать статью Ответить
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS