Projet

Général

Profil

Bug #21560

la date de dernière modification d'un compte est modifiée lors d'une connexion

Ajouté par Frédéric Péters il y a plus de 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
OpenID Connect
Version cible:
-
Début:
31 janvier 2018
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Du coup sauf s'il n'y a pas eu de connexion entre une modif et une connexion de l'usager on se trouve toujours avec date de modif = date de dernière connexion.

C'est parce qu'au login il y a un .save() :

  authentic/src/authentic2/utils.py(400)login()
-> auth_login(request, user)
  venv/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py(117)login()
-> user_logged_in.send(sender=user.__class__, request=request, user=user)
  venv/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py(189)send()
-> response = receiver(signal=self, sender=sender, **named)
  venv/local/lib/python2.7/site-packages/django/contrib/auth/models.py(26)update_last_login()
-> user.save(update_fields=['last_login'])
> authentic/src/authentic2/custom_user/models.py(236)save()
-> sync = not(kwargs.pop('nosync', False))

Fichiers

Révisions associées

Révision 1aa16b62 (diff)
Ajouté par Benjamin Dauvergne il y a environ 6 ans

auth_oidc: only update user's fields if they changed (fixes #21560)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Bizarre j'étais persuadé que le update_fields évitait ça :/

#2

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Et j'ai raison https://code.djangoproject.com/ticket/22981 , je ne comprends pas ce qui se passe, il doit y avoir un autre save() ici.

#3

Mis à jour par Frédéric Péters il y a plus de 6 ans

Oui il doit y avoir autre chose, j'ai fait la trace en local trop rapidement sans vérifier et c'est ok; mais par contre en navigant côté gnm c'est généralement le cas.

Mais comme tu dis ça doit être un autre save(), qui viendrait juste un peu avant :

          last_login           |           modified            
-------------------------------+-------------------------------
 2018-01-31 10:23:06.809221+01 | 2018-01-31 10:23:06.781739+01

Je vais tracer côté GNM.

#4

Mis à jour par Frédéric Péters il y a plus de 6 ans

  • Catégorie mis à OpenID Connect

Voilà, en authent oidc il y a récupération des attributs et ils sont posés et un save() a lieu :

  File "/usr/lib/python2.7/dist-packages/authentic2_auth_oidc/views.py", line 176, in get
    user = authenticate(access_token=access_token, id_token=result['id_token'])
  File "/usr/lib/python2.7/dist-packages/django/contrib/auth/__init__.py", line 74, in authenticate
    user = backend.authenticate(**credentials)
  File "/usr/lib/python2.7/dist-packages/authentic2_auth_oidc/backends.py", line 231, in authenticate
    user.save()
  File "/usr/lib/python2.7/dist-packages/authentic2/custom_user/models.py", line 236, in save

Il y a même toute une série de save(), sur les autres attributs (# new style attributes) :

  File "/usr/lib/python2.7/dist-packages/authentic2_auth_oidc/views.py", line 176, in get
    user = authenticate(access_token=access_token, id_token=result['id_token'])
  File "/usr/lib/python2.7/dist-packages/django/contrib/auth/__init__.py", line 74, in authenticate
    user = backend.authenticate(**credentials)
  File "/usr/lib/python2.7/dist-packages/authentic2_auth_oidc/backends.py", line 236, in authenticate
    attributes_map[attribute].set_value(user, value, verified=verified)
  File "/usr/lib/python2.7/dist-packages/authentic2/models.py", line 237, in set_value
    owner.save(update_fields=['modified'])
  File "/usr/lib/python2.7/dist-packages/authentic2/custom_user/models.py", line 236, in save
#5

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Catégorie OpenID Connect supprimé

Je vois, bon la solution ce serait de vérifier avant d'écrire que quelque chose à changer comme le fait le backend LDAP pour éviter des écritures inutiles, ça devrait augmenter les perfs du SSO OIDC d'ailleurs.

#6

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Catégorie mis à OpenID Connect
#7

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

J'en ai profité pour ajouter plus de logs et j'ai déplacé le log des
créations/liens avant les logs de mise à jour des attributs.

#8

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

  • Assigné à mis à Benjamin Dauvergne
  • Patch proposed changé de Non à Oui
#9

Mis à jour par Emmanuel Cazenave il y a environ 6 ans

Testé que ton test reproduisais le bug.

Pas compris pourquoi tu préfères passer à if not in ...continue puis un deuxième if, au lieu de simplement rajouter un deuxième terme au if initial.

Mais rien de crucial donc ack.

#10

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

  • Statut changé de Nouveau à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#11

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF