is_authenticated retourneert True voor AnonymousUser

Ik heb problemen met is_authenticated retourneren True wanneer ik niet ingelogd ben:

u = request.user
if u.is_authenticated:
    raise Exception('I am said to be authenticated, but I really am not.')

Om te verduidelijken, identificeert de Debug-weergave van Django correct u als een AnonymousUser :

u   

Nog vreemder, in de sjabloon is_anonymous werkt prima:

{% if not request.user.is_authenticated %}
    We are anonymous.
{% endif %}

Waarom is dat?

4
toegevoegd de auteur Paul Kenjora, de bron

2 antwoord

Het is een methode , geen eigendom. Je moet het noemen:

if u.is_authenticated():

Natuurlijk, in een sjabloon, Django oproepmethoden voor u automatisch.

26
toegevoegd

is_authenticated is a method, so you need some parentheses there. Otherwise, u.is_authenticated is the function object, which is a Trueish value.

In de sjabloontaal worden functies zonder argumenten geëvalueerd als functies, dus dat is waarom je daar goed bent.

6
toegevoegd
Oh bedankt. Dit is volkomen logisch. Een van die subtiele bugs waar je misschien niet naar op zoek bent na jaren werken met een taal die alleen booleans in de conditie toestaat.
toegevoegd de auteur Dan Abramov, de bron