ti-enxame.com

Como verificar se um usuário está logado (como usar corretamente user.is_authenticated)?

Eu estou olhando este site mas simplesmente não consigo descobrir como fazer isso, pois não está funcionando. Eu preciso verificar se o usuário do site atual está logado (autenticado), e estou tentando:

request.user.is_authenticated

apesar de ter certeza de que o usuário está logado, ele retorna apenas:

>

Eu sou capaz de fazer outras solicitações (da primeira seção na URL acima), como:

request.user.is_active

que retorna uma resposta bem sucedida.

204
Rick

Atualização para o Django 1.10+ : is_authenticated é agora um atributo no Django 1.10. O método ainda existe para compatibilidade com versões anteriores, mas será removido no Django 2.0.

Para o Django 1.9 e mais antigo :

is_authenticated é uma função. Você deveria ligar assim

if request.user.is_authenticated():
    # do something if the user is authenticated

Como Peter Rowell apontou, o que pode estar enganando você é que na linguagem padrão do Django, você não usa parênteses para chamar funções. Então você pode ter visto algo assim no código do template:

{% if user.is_authenticated %}

No entanto, no código Python, é realmente um método na classe User.

435
Brian Neal

O seguinte bloco deve funcionar: 

    {% if user.is_authenticated %}
        <p>Welcome {{ user.username }} !!!</p>       
    {% endif %}
15
Sopan

Django 1.10+

Use um atributo, not um método:

if request.user.is_authenticated: # <-  no parentheses any more!
    # do something if the user is authenticated

O uso do método de mesmo nome é obsoleto no Django 2.0 e não é mais mencionado na documentação do Django.


Note que para o Django 1.10 e 1.11, o valor da propriedade é um CallableBool e não um booleano, o que pode causar alguns bugs estranhos. Por exemplo, eu tive uma visão que retornou JSON

return HttpResponse(json.dumps({
    "is_authenticated": request.user.is_authenticated()
}), content_type='application/json') 

que depois de atualizado para a propriedade request.user.is_authenticated estava lançando a exceção TypeError: Object of type 'CallableBool' is not JSON serializable. A solução foi usar o JsonResponse, que poderia manipular o objeto CallableBool corretamente ao serializar:

return JsonResponse({
    "is_authenticated": request.user.is_authenticated
})
14
Mark Chackerian

Na sua opinião:

{% if user.is_authenticated %}
<p>{{ user }}</p>
{% endif %}

Em você as funções do controlador adicionam o decorador:

from Django.contrib.auth.decorators import login_required
@login_required
def privateFunction(request):
1
Cubiczx