with users example authenticated authenticate python django authentication

python - example - django users groups permissions



¿Cómo comprobar si un usuario ha iniciado sesión(cómo utilizar correctamente user.is_authenticated)? (4)

El siguiente bloque debería funcionar:

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

Estoy revisando este sitio web, pero parece que no puedo entender cómo hacerlo ya que no está funcionando. Necesito verificar si el usuario del sitio actual está conectado (autenticado), y estoy intentando:

request.user.is_authenticated

a pesar de estar seguro de que el usuario ha iniciado sesión, devuelve solo:

>

Puedo hacer otras solicitudes (desde la primera sección en la url arriba), como:

request.user.is_active

lo que devuelve una respuesta exitosa.


En su opinión:

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

En las funciones de tu controlador agrega decorador:

from django.contrib.auth.decorators import login_required @login_required def privateFunction(request):


Actualización para Django 1.10+ : is_authenticated ahora es un atributo en Django 1.10. El método aún existe para la compatibilidad con versiones anteriores, pero se eliminará en Django 2.0.

Para Django 1.9 y mayores :

is_authenticated es una función. Deberias llamarlo como

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

Como lo señaló Peter Rowell, lo que puede estar causándote una trampa es que en el lenguaje de plantilla de Django predeterminado, no se agrega el paréntesis a las funciones de llamada. Es posible que hayas visto algo como esto en el código de la plantilla:

{% if user.is_authenticated %}

Sin embargo, en el código Python, es de hecho un método en la clase User .


Django 1.10+

Use un atributo, no un método:

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

El uso del método del mismo nombre está en desuso en Django 2.0 y ya no se menciona en la documentación de Django.

Tenga en cuenta que para Django 1.10 y 1.11, el valor de la propiedad es un CallableBool y no un booleano, lo que puede causar algunos errores extraños. Por ejemplo, tenía una vista que devolvía JSON

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

que después de actualizar a la propiedad request.user.is_authenticated estaba lanzando la excepción TypeError: Object of type ''CallableBool'' is not JSON serializable . La solución fue usar JsonResponse, que podría manejar el objeto CallableBool correctamente al serializar:

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