I am looking over this website but just can\'t seem to figure out how to do this as it\'s not working. I need to check if the current site user is logged in (authenticated),
In your view:
{% if user.is_authenticated %}
<p>{{ user }}</p>
{% endif %}
In you controller functions add decorator:
from django.contrib.auth.decorators import login_required
@login_required
def privateFunction(request):
Following block should work:
{% if user.is_authenticated %}
<p>Welcome {{ user.username }} !!!</p>
{% endif %}
For Django 2.0+ versions use:
if request.auth:
# Only for authenticated users.
For more info visit https://www.django-rest-framework.org/api-guide/requests/#auth
request.user.is_authenticated() has been removed in Django 2.0+ versions.
If you want to check for authenticated users in your template then:
{% if user.is_authenticated %}
<p>Authenticated user</p>
{% else %}
<!-- Do something which you want to do with unauthenticated user -->
{% endif %}
Update for Django 1.10+:
is_authenticated
is now an attribute in Django 1.10.
The method was removed in Django 2.0.
For Django 1.9 and older:
is_authenticated
is a function. You should call it like
if request.user.is_authenticated():
# do something if the user is authenticated
As Peter Rowell pointed out, what may be tripping you up is that in the default Django template language, you don't tack on parenthesis to call functions. So you may have seen something like this in template code:
{% if user.is_authenticated %}
However, in Python code, it is indeed a method in the User
class.
Django 1.10+
Use an attribute, not a method:
if request.user.is_authenticated: # <- no parentheses any more!
# do something if the user is authenticated
The use of the method of the same name is deprecated in Django 2.0, and is no longer mentioned in the Django documentation.
CallableBool
and not a boolean, which can cause some strange bugs.
For example, I had a view that returned JSON
return HttpResponse(json.dumps({
"is_authenticated": request.user.is_authenticated()
}), content_type='application/json')
that after updated to the property request.user.is_authenticated
was throwing the exception TypeError: Object of type 'CallableBool' is not JSON serializable
. The solution was to use JsonResponse, which could handle the CallableBool object properly when serializing:
return JsonResponse({
"is_authenticated": request.user.is_authenticated
})