J'ai écrit ceci dans une vue ajax, mais c'est une réponse plus détaillée donnant la liste des utilisateurs actuellement connectés et déconnectés.
L'attribut is_authenticated
retourne toujours True
pour mes utilisateurs, ce qui est probablement attendu puisqu'il ne vérifie que les AnonymousUsers, mais cela se révèle inutile si vous devez développer une application de chat où vous avez besoin d'afficher les utilisateurs connectés.
Cela vérifie les sessions expirées et détermine ensuite à quel utilisateur elles appartiennent en fonction de l'attribut décodé _auth_user_id
:
def ajax_find_logged_in_users(request, client_url):
"""
Déterminez les utilisateurs authentifiés dans le système ou non.
Est un moyen logique de vérifier si un utilisateur a une session expirée (c'est-à-dire qu'il n'est pas connecté)
:param request:
:param client_url:
:return:
"""
# interroger les sessions non expirées
sessions = Session.objects.filter(expire_date__gte=timezone.now())
user_id_list = []
# construire la liste des identifiants utilisateur à partir de la requête
for session in sessions:
data = session.get_decoded()
# si l'utilisateur est authentifié
if data.get('_auth_user_id'):
user_id_list.append(data.get('_auth_user_id'))
# rassembler les personnes connectées à partir de la liste des clés primaires
logged_in_users = CustomUser.objects.filter(id__in=user_id_list)
list_of_logged_in_users = [{user.id: user.get_name()} for user in logged_in_users]
# Interroger tous les utilisateurs du personnel connectés en fonction de la liste d'identifiants
all_staff_users = CustomUser.objects.filter(is_resident=False, is_active=True, is_superuser=False)
logged_out_users = list()
# pour une raison quelconque, exclude() ne fonctionnerait pas correctement, donc j'ai fait les choses à ma manière.
for user in all_staff_users:
if user not in logged_in_users:
logged_out_users.append(user)
list_of_logged_out_users = [{user.id: user.get_name()} for user in logged_out_users]
# renvoyer la réponse ajax
data = {
'logged_in_users': list_of_logged_in_users,
'logged_out_users': list_of_logged_out_users,
}
print(data)
return HttpResponse(json.dumps(data))
2 votes
Possible duplicate de En Django, comment savoir quel utilisateur est actuellement connecté ?
2 votes
@CiroSantilli Duplicate exact