Django: бесконечные перенаправления в коде установки cookie? - PullRequest
1 голос
/ 05 апреля 2011

Этот код настройки / перенаправления файлов cookie Django приводит к циклу перенаправления даже для браузеров с включенными файлами cookie. Кто-нибудь может объяснить, как это исправить?

В urls.py:

url(r'^$', 'library.views.home', name="home"),
url(r'^ldap/(?P<next>[\w-]*)/$', 'library.views.update_session_from_ldap', name="ldap"),

В views.py:

def home(request):
    print 'home'
    current_user = request.COOKIES.get('ldap_user', None)
    print current_user
    if not current_user:
        return redirect('/ldap', next='/')
    print 'now here'
# url = '/ldap'
def update_session_from_ldap(request, next):
    remote_user = request.META.get('REMOTE_USER', None)
    hrr = HttpResponseRedirect(next)
    hrr.set_cookie('ldap_user', remote_user)
    print 'set cookie!'
    return hrr

Я просто вижу ...

home
None
[04/Apr/2011 23:21:17] "GET / HTTP/1.1" 302 0
set cookie!
[04/Apr/2011 23:21:17] "GET / HTTP/1.1" 302 0
set cookie!
[04/Apr/2011 23:21:17] "GET / HTTP/1.1" 302 0
set cookie!... ad infinitum until the browser intervenes

Если я перезагружаю страницу во второй раз, все в порядке: оператор print показывает правильное значение и перенаправления нет, поэтому cookie работает. Это всего лишь первый раз, когда код запускается, что он входит в бесконечный цикл.

Есть идеи? Есть ли лучшие способы решить эту проблему?

Проблема одинакова в Firefox и Chrome.

Спасибо!

ОБНОВЛЕНИЕ: Я думаю, проблема в том, как настроены URL-адреса: мне нужно найти способ перейти от «home» к «ldap» и обратно, каким-то образом. Я думаю, что на данный момент «ldap» просто перенаправляет на себя.

1 Ответ

0 голосов
/ 05 апреля 2011

Не похоже, что ваше регулярное выражение будет соответствовать /:

urls.py:

url(r'^ldap/(?P<next>[\w-]*)/$', 'library.views.update_session_from_ldap', name="ldap"),

views.py:

def update_session_from_ldap(request, next):
    if next is None:
        hrr = HttpResponseRedirect("/")
    else:
        hrr = HttpResponseRedirect(next)
    remote_user = request.META.get('REMOTE_USER', None)
    hrr.set_cookie('ldap_user', remote_user)
    print 'set cookie!'
    return hrr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...