Django: установить пользователя как аутентифицированного без перезагрузки страницы

В веб-приложении, которое я создал, аутентификация пользователя обрабатывается в модальном окне jQuery.

Мой вопрос:
Можно ли после регистрации установить пользователя как "аутентифицированного" (в глазах Джанго) в родительском окне при закрытии модального окна без перезагрузки родительское окно?

В настоящее время процесс выглядит следующим образом:
1) Пользователь посещает страницу и нажимает на функцию, доступную только для участников
2) Страница становится серой, и появляется модальное окно регистрации jQuery (я с помощью Colorbox)
3) Пользователь регистрируется на моем сайте и закрывает модальное окно
4) Colorbox запускает обработчик onClosed() для обновления родительской страницы

Я хотел бы изменить № 4, чтобы обработчик Colorbox вызывал функцию Javascript, чтобы установить пользователя как «аутентифицированного» вместо грубого метода перезагрузки страницы.

Кто-нибудь делал это раньше и хочет поделиться своим советом?


person mitchf    schedule 10.05.2011    source источник
comment
Я бы предложил Аякс? ... Что нужно сделать, так это перерисовать часть страницы после входа в систему. (Извините, я не могу больше помочь, чем это.)   -  person James Khoury    schedule 10.05.2011
comment
Спасибо, Джеймс. Я использую Ajax для других обновлений на странице, но не знаю, как использовать его для обновления значения is_authenticated Django без перезагрузки страницы.   -  person mitchf    schedule 10.05.2011
comment
Я бы сделал так, как предлагает Брайан, и на сервере ваш пользователь должен быть аутентифицирован. Если у вас есть хороший аутентифицированный ответ, попробуйте обработать функцию только для участников, как вошедший в систему пользователь.   -  person James Khoury    schedule 10.05.2011
comment
Я серьезно запутался здесь. В любом случае, не имеет значения, знает ли Django, что пользователь аутентифицирован или нет, до обновления страницы. Django ничего не делает с уже отрендеренной веб-страницей, находящейся в окне браузера. Это имело бы значение только в том случае, если бы вы сделали какой-либо дополнительный запрос через AJAX, но Django будет знать статус аутентификации пользователя в этот момент. Если вы просто говорите об изменении текста на экране, такого как «Войти в систему», чтобы «Приветствовать Джо», «Выйти из системы», это будет сделано с помощью обратного вызова из AJAX, используемого для фактического входа пользователя в систему.   -  person Chris Pratt    schedule 11.05.2011


Ответы (1)


Я не пробовал это сам, но я бы посоветовал вам аутентифицировать/войти (из модуля django.contrib.auth) пользователя вручную, когда пользователь отправляет регистрацию, а затем отображать ответ, который будет обработан jquery. Этот ответ может быть просто кодом состояния, означающим, что учетная запись была успешно создана. Ответ представляет собой обычный HTTP-ответ, поэтому он должен содержать информацию о файлах cookie для нового идентификатора сеанса в заголовке. Этот заголовок обрабатывается браузером до того, как jQuery что-либо с ним сделает, поэтому он должен обрабатываться так же, как перезагрузка всей страницы.

person Brian Fisher    schedule 10.05.2011