2016-05-25 14 views
6
if not request.user.is_authenticated: 
    return None 

try: 
    return ClientProfile.objects.get(user=request.user) 
except ClientProfile.DoesNotExist: 
    return None 

Ten kod powinien zwrócić Brak, jeśli nie jestem zalogowany i próbuję się z nim połączyć. Ale jak widzę z stacktrace, to wywala się z błędem „obiekt«AnonymousUser»nie jest iterable” na tej linii:Obiekt 'AnonymousUser' nie jest iterowalny

return ClientProfile.objects.get(user=request.user) 

jestem przeglądania następujące strony w trybie prywatnym, więc jestem 100% nie uwierzytelniony .

Jak naprawić ten problem?

Odpowiedz

9

W Django 1.9 i wcześniejszych, is_authenticated() jest metodą, którą musisz wywołać.

if not request.user.is_authenticated(): 
    ... 

To prosty błąd, aby zapomnieć o wywołaniu metody. W twoim przypadku powoduje to błąd, ale w innych przypadkach może pozwolić użytkownikom na dostęp do danych, których nie powinni. Z Django 1.10, is_authenticated zmienia się na właściwość, aby temu zapobiec.

+0

Och, dzięki. Skopiowane z kodu szablonu :) – arts777

Powiązane problemy