Неправильно работает плагин "Аутентификация - Cookie", не пускает юзера в персональный кабинет

  • 5 Ответов
  • 937 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

kolio

Привет всем
столкнулся такой бедой

1. если залогены на фронтэнде, то разлогиниваемся и чистим куки, закрываем браузер, открываем - для чистого теста
2. логинимся - входим в редактирование своего профиля - пускает, всё работает
3. просто закрываем страницу и браузер
4. запускаем браузер и входим на сайт. по идее куки запомнены и должны автоматом продолжить юзать сайт под те же логином - так и происходит
5. перешагивая по страницам видно, что залогены нормально
6. нажимаем снова на ссылку редактирования профиля и получаем вот что (см. фото)
7. пробовал отключать кеширование, отключать ЧПУ - всё аналогично, аналогичная картина четко наблюдается и на локальном сервере
8. если снова разлогиниться и снова войти - то пускает в профиль, даже не перезапуская браузер
9. что то или с куками или с сессиями, непонятно  :'(
10. если после неудачной попытки войти в профиль нажать НАЗАД, то выдаст кучу
Код
Из соображений безопасности вам необходимо авторизоваться для редактирования вашей персональной информации.
Из соображений безопасности вам необходимо авторизоваться для редактирования вашей персональной информации.
Из соображений безопасности вам необходимо авторизоваться для редактирования вашей персональной информации.
Из соображений безопасности вам необходимо авторизоваться для редактирования вашей персональной информации.
Из соображений безопасности вам необходимо авторизоваться для редактирования вашей персональной информации.
в общем фраза JGLOBAL_REMEMBER_MUST_LOGIN
10. по исходнику нашел кто генерит её:
components\com_users\views\profile\view.html.php
функция public function display($tpl = null)
строки

Код
// View also takes responsibility for checking if the user logged in with remember me.
$user = JFactory::getUser();
$cookieLogin = $user->get('cookieLogin');

if (!empty($cookieLogin))
{
// If so, the user must login to edit the password and other data.
// What should happen here? Should we force a logout which detroys the cookies?
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('JGLOBAL_REMEMBER_MUST_LOGIN'), 'message');
$app->redirect(JUri::base(). 'index.php?option=com_users&view=login', '', 302);

return false;
}

возможно у кого-то аналогичная проблема была?

*

SmokerMan

Это вроде как дополнительная защита перед редактированием данных
А вообще не понятно что этот кусок делает в виде. Т.к. в контролере в методе edit он есть.
Т.е. по логике его тут не должно быть, похоже на баг


*

kolio

Пока решил отключить лишние плагины
Уже вижу, что нет такой беды, но просит ввести логин и пароль - то есть отображает формочку входа в сайт
но при этом модуль     Improved AJAX Login and Register  показывает, что я залогинен

возможно это связано с тем, что я логинюсь не юзая имя, а почтовый адрес
видать беда в компоненте Improved AJAX Login and Register

*

kolio

Это вроде как дополнительная защита перед редактированием данных
А вообще не понятно что этот кусок делает в виде. Т.к. в контролере в методе edit он есть.
Т.е. по логике его тут не должно быть, похоже на баг

Возможно, сейчас убираю все плагины и хочу чистый тест провести без примесей

без этого куска кода ВСЁ РАБОТАЕТ
на живом сайте тоже всё окей даже без отключения плагинов

один и тот же код в разных местах: один на редактирование, другой на display, но по факту ведут в одно и то же место

но самое интересное, что в edit там есть проверка
Код
$app		= JFactory::getApplication();
$user = JFactory::getUser();
$loginUserId = (int) $user->get('id');

// Get the previous user id (if any) and the current user id.
$previousId = (int) $app->getUserState('com_users.edit.profile.id');
$userId     = $this->input->getInt('user_id', null, 'array');

// Check if the user is trying to edit another users profile.
if ($userId != $loginUserId)
{
JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR'));
return false;
}

а в view.html.php этого нет

думаю закоментить то, что выдает ошибку, а вместо него добавить код который выше
« Последнее редактирование: 12.08.2014, 15:14:25 от kolio »

*

kolio

В общем сделал так:
Код
	$app		= JFactory::getApplication();
// View also takes responsibility for checking if the user logged in with remember me.
$user = JFactory::getUser();
$loginUserId = (int) $user->get('id');

// Check if the user is trying to edit another users profile.
if (!$loginUserId)
{
JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR'));
return false;
}

можно было бы 1 строку сократить, но не столь важно
если разлогинился, то не пускает по адресу http://127.0.0.1/kabinet/profile?layout=edit
залогинился - пускает и отображает данные

думаю тема закрыта, спасибо собеседнику за поддержку и за то, что сказал, что это возможно баг

*

ipdj


но самое интересное, что в edit там есть проверка
Код
$app		= JFactory::getApplication();
$user = JFactory::getUser();
$loginUserId = (int) $user->get('id');

// Get the previous user id (if any) and the current user id.
$previousId = (int) $app->getUserState('com_users.edit.profile.id');
$userId     = $this->input->getInt('user_id', null, 'array');

// Check if the user is trying to edit another users profile.
if ($userId != $loginUserId)
{
JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR'));
return false;
}

а в view.html.php этого нет


Подскажите где лежит edit?