Django 1.10+.
Utilisez un attribut, pas une méthode :
if request.user.is_authenticated: # <- no parentheses any more!
# do something if the user is authenticated
L'utilisation de la méthode du même nom est dépréciée dans Django 2.0, et n'est plus mentionnée dans la documentation de Django.
Notez que pour Django 1.10 et 1.11, la valeur de la propriété est un fichier de type CallableBool
et non un booléen, ce qui peut provoquer des bogues étranges. Par exemple, j'avais une vue qui renvoyait du JSON
return HttpResponse(json.dumps({
"is_authenticated": request.user.is_authenticated()
}), content_type='application/json')
qui, après avoir été mis à jour, devient la propriété request.user.is_authenticated
lançait l'exception TypeError: Object of type 'CallableBool' is not JSON serializable
. La solution était d'utiliser JsonResponse, qui pouvait gérer correctement l'objet CallableBool lors de la sérialisation :
return JsonResponse({
"is_authenticated": request.user.is_authenticated
})
1 votes
Is_authenticated (à l'intérieur comme à l'extérieur des modèles) renvoie toujours True, que l'utilisateur soit connecté ou non. Pour vraiment identifier si un utilisateur est connecté, la seule solution semble être de comparer la date et l'heure de sa dernière consultation avec le délai d'attente.