Bien le bonjour, bien le bonsoir,
J’ouvre ce sujet pour discuter des comptes membre qui sont créés mais inactifs. Le sujet sera abordé à la prochaine réunion des dév’s de ZdS, mais j’anticipe, surtout pour donner quelques chiffres.
Rappel des différents états possibles d’un compte
Un visiteur du site se crée un compte. Le compte est créé en base de données. Il possède une date d’inscription, mais est inactif.
Le nouveau membre doit alors valider son inscription en cliquant sur le lien qui lui a été envoyé par mail. Une fois qu’il a cliqué sur ce lien, son compte devient actif.
Lorsqu’un membre se connecte, la date de dernière connexion est mise à jour en base de données.
Finalement, un membre peut être banni définitivement, empêchant alors la connexion.
Statistiques actuelles
- Nombre d’utilisateurs total : 25336
- Nombre d’utilisateurs qui ont confirmé leur adresse mail : 22606 (soit 89 % du nombre total)
- Nombre d’utilisateurs qui n’ont pas confirmé leur adresse mail : 2730, dont qui se sont inscrits il y a plus d’un an : 2488
- Nombre d’utilisateurs qui se sont connectés au moins une fois : 22804 (soit 90 % du nombre total et 101 % du nombre de mails confirmés, oui, il y a 375 comptes non confirmés mais qui se sont connectés…)
- Nombre d’utilisateurs qui ne se sont jamais connectés après avoir validé leur adresse mail : 2532, dont qui se sont inscrits il y a plus d’un an : 2266
- Nombre d’utilisateurs bannis définitivement : 2386
Concernant les comptes non confirmés qui ont pu se connecter, les dernières connexions de comptes non confirmés datent de 2017. Je viens de vérifier en local, je ne peux pas me connecter si je n’ai pas validé mon adresse mail et la date de dernière connexion reste nulle.
Les statistiques ont été générées avec ce script :
from django.contrib.auth.models import User
from django.db.models import Q
from zds.member.models import Profile
total_number = User.objects.count()
print("Total number of users:", total_number)
confirmed_number = User.objects.filter(is_active=True).count()
print("Total number of confirmed users:", confirmed_number, 100*confirmed_number/total_number)
never_logged_users_number = User.objects.filter(last_login=None).count()
logged_users_number = total_number - never_logged_users_number
print("Number of logged users:", logged_users_number, 100*logged_users_number/total_number, 100*logged_users_number/confirmed_number)
banned_users_number = Profile.objects.filter(can_read=False,end_ban_read=None).count()
print("Number of banned users:", banned_users_number)
print("Number of never logged users:", never_logged_users_number)
print("Number of never logged users, registered at least a year ago:", User.objects.filter(last_login=None, date_joined__lt="2022-05-21").count())
print("Number of unconfirmed users:", User.objects.filter(is_active=False).count())
print("Number of unconfirmed users, registered at least a year ago:", User.objects.filter(is_active=False, date_joined__lt="2022-05-21").count())
print(User.objects.filter(Q(is_active=False) & ~Q(last_login=None)).count())
for u in User.objects.filter(Q(is_active=False) & ~Q(last_login=None)).order_by("last_login"):
print(u.username, u.date_joined, u.last_login)
Lancé avec la commande :
python manage.py shell < script.py
Que faire avec les comptes inactifs ?
Pour ceux qui ne se sont jamais connectés après avoir validé leur adresse mail, ça me paraît difficilement justifiable de supprimer leur compte. À moins de dire clairement dans le mail de validation, quelque chose comme : "vous avez maintenant une semaine pour vous connecter et activer votre compte".
On veut garder les bannis, parce qu’on ne veut pas qu’ils s’inscrivent à nouveau avec la même adresse mail.
Par contre, je pense qu’on peut régulièrement supprimer les comptes qui n’ont pas validé leur adresse mail un an (durée à définir) après s’être inscrit.
Des avis ? Des idées ? Des remarques ?