returnUrl после ajax

Переводы Cookbook и авторские рецепты.

returnUrl после ajax

Сообщение theKiller » 2010.03.03, 00:54

Вот такая непонятка возникает: предположим незалогиненый пользователь ходит по сайту. Его передвижения нормально запоминаются в ретурнУРЛ. Он логинится и его корректно возвращает на последнюю страницу.

Теперь меняем ситуацию: на одном из его шагов по сайту направляем его на ajaxLink, разрешенный только для залогиненых. Его от туда естественно отплеввывает. Далее он продолжает ходить по сайту, логинится и… его отбрасывает гетом на тот аяксУрл, который для него был закрыт пару шагов назад и естественно в браузере 400-ошибка.

Что за ерунда? Кто сталкивался? Исправляется автоматом или переопределять ручками ретурнУРЛ в контроллере?
theKiller
 
Сообщения: 95
Зарегистрирован: 2010.02.28, 22:58

Re: returnUrl после ajax

Сообщение Sam Dark » 2010.03.03, 01:21

Сталкивался. Исправил руками.
Аватара пользователя
Sam Dark
Администратор
 
Сообщения: 1693
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж

Re: returnUrl после ajax

Сообщение theKiller » 2010.03.03, 20:13

Ну так мож это баг? Ведь нелогичное поведение…
theKiller
 
Сообщения: 95
Зарегистрирован: 2010.02.28, 22:58

Re: returnUrl после ajax

Сообщение Sam Dark » 2010.03.03, 20:21

Возможно, я не разбирался в причинах такого поведения.
Аватара пользователя
Sam Dark
Администратор
 
Сообщения: 1693
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж

Re: returnUrl после ajax

Сообщение Tokolist » 2010.03.04, 00:44

Не в аяксе вовсе дело.

returnURL хранится в сессии и записывается туда только когда юзер зашел на недоступную ему страницу.
Отсюда вывод даже если он пойдет дальше по страницам (например loginUrl == null) то при при логине он вернется на последнюю недоступную ему страницу :)

Поведение не правильное имхо. returnURL должен быть равным последней посещенной страницы не зависимо от того была ли она доступна пользователю.

Временно можно решить проблему приблизительно так

Код: Выделить всё
$this->setReturnUrl($request->isAjaxRequest ? null : $request->getUrl()); 


Это в CWebUser->loginRequired()
Аватара пользователя
Tokolist
 
Сообщения: 53
Зарегистрирован: 2010.03.01, 22:03

Re: returnUrl после ajax

Сообщение theKiller » 2010.03.04, 20:27

Я назначение делаю в контроллере (он и так по умолчанию переопределен).
theKiller
 
Сообщения: 95
Зарегистрирован: 2010.02.28, 22:58

Re: returnUrl после ajax

Сообщение Sam Dark » 2010.03.04, 20:28

Да, совсем забыл, что в YiiExt есть для этого дела отдельный компонент: http://code.google.com/p/yiiext/source/ ... tReturnUrl
Аватара пользователя
Sam Dark
Администратор
 
Сообщения: 1693
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж

Re: returnUrl после ajax

Сообщение Tokolist » 2010.03.07, 22:29

Sam Dark
В фильтре еще надо проверять является ли страница страницей логина и если да, то не устанавливать returnUrl, а то после логина будет редирект на саму себя. Правильно ли я понимаю?
Аватара пользователя
Tokolist
 
Сообщения: 53
Зарегистрирован: 2010.03.01, 22:03

Re: returnUrl после ajax

Сообщение creocoder » 2010.03.07, 22:36

Tokolist
Нет, фильтру нужно указать для каких конкретно действий работать или не работать. Более подробно, как это сделать, рассказано тут в разделе Фильтры.
Аватара пользователя
creocoder
 
Сообщения: 10
Зарегистрирован: 2010.01.24, 05:29
Откуда: Тамбов

Re: returnUrl после ajax

Сообщение Tokolist » 2010.03.07, 23:56

Все. Понял, спасибо :)
Аватара пользователя
Tokolist
 
Сообщения: 53
Зарегистрирован: 2010.03.01, 22:03

След.

Вернуться в Рецепты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron