¿Cómo verifico si este usuario es anónimo o realmente un usuario en mi sistema?


81
def index(request):
    the_user = request.user

En Django, ¿cómo sé si es un usuario real o no? Lo intenté:

if the_user: pero "AnonymousUser" está ahí incluso si nadie inicia sesión. Por lo tanto, siempre devuelve verdadero y esto no funciona.

Respuestas:


136

Puedes comprobar si request.user.is_anonymousvuelve True.


20
Tenga en cuenta que views.pydebe usar request.user.is_anonymous()ya que es una función, mientras que en las plantillas debe usar{{user.is_anonymous}}
— amigcamel

11
Parece que en Django 1.9 es más bien is_authenticated(): consulte docs.djangoproject.com/en/1.9/topics/auth/default/…
— Paolo Stefan

11
de Django 1.10, is_anonymous ya no es un método (solo una propiedad)
— maxbellec

2
Debo estar de acuerdo con Paolo Stefan, el método que desea utilizar es is_authenticated(). Véase también thegarywilson.com/blog/2006/is_authenticated-vs-is_anonymous
— Al Sweigart

3
La recomendación actual es usar request.user.is_authenticated, que es un atributo en Django 1.10+, el mismo que is_anonymousahora - vea docs.djangoproject.com/en/dev/ref/contrib/auth/… . Tenga en cuenta que si también está utilizando Django Guardian, estos atributos no harán lo que cree que harán; consulte django-guardian.readthedocs.io/en/stable/configuration.html
— rhunwicks

18

Una alternativa a

if user.is_anonymous():
    # user is anon user

es probando para ver cuál es la identificación del objeto de usuario:

if user.id == None:
    # user is anon user
else:
    # user is a real user

ver https://docs.djangoproject.com/en/dev/ref/contrib/auth/#anonymous-users


4
parece una mala idea. user.is_anonymous () seguirá funcionando en las nuevas versiones, user.id podría no, dependiendo de futuras implementaciones
— maxbellec

Además, tenga en cuenta que si está utilizando Django Guardian, el usuario anónimo también tendrá una identificación; consulte django-guardian.readthedocs.io/en/stable/… .
— rhunwicks

Y la recomendación actual según docs.djangoproject.com/en/dev/ref/contrib/auth/… es usar User.is_authenticated
— rhunwicks

Desafortunadamente, esto no funciona. Fue lo primero que intenté. Parece que el usuario "anónimo" aparece cuando se usa user == None (y otras variaciones).
— Harlin

4

Sé que estoy investigando un poco aquí, pero una búsqueda en Google me llevó a esta página.

Si su view def requiere que el usuario haya iniciado sesión, puede implementar el decorador @login_required:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    …

Esto no funcionará en la vista de "inicio de sesión" de valores sin alguna personalización.
— Harlin

0

Tuve un problema similar, excepto que esto estaba en una página a la que se envió login_redirect_url. Tuve que poner la plantilla:

{% if user.is_authenticated %}
    Welcome Back, {{ username }}
{% endif %}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.