Projet

Général

Profil

Development #53409

AttributeError: 'LoginOrLinkView' object has no attribute 'authenticate'

Ajouté par Sentry Io il y a presque 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
25 avril 2021
Echéance:
% réalisé:

0%

Temps estimé:
Hors marché:
Non
Patch proposed:
Oui
Planning:
Non

Description

https://sentry.entrouvert.org/entrouvert/publik/issues/44497/

IntegrityError: duplicate key value violates unique constraint "authentic2_auth_fc_fcaccount_user_id_order_9be8b543_uniq" 
DETAIL:  Key (user_id, "order")=(82582, 0) already exists.

  File "django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)

IntegrityError: duplicate key value violates unique constraint "authentic2_auth_fc_fcaccount_user_id_order_9be8b543_uniq" 
DETAIL:  Key (user_id, "order")=(82582, 0) already exists.

(10 additional frame(s) were not displayed)
...
  File "django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)

AttributeError: 'LoginOrLinkView' object has no attribute 'authenticate'
(4 additional frame(s) were not displayed)
...
  File "django/views/generic/base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "authentic2_auth_fc/views.py", line 105, in get
    response = self.handle_authorization_response(request, code=code, state=state)
  File "authentic2_auth_fc/views.py", line 188, in handle_authorization_response
    return self.login(request)
  File "authentic2_auth_fc/views.py", line 331, in login
    user = self.create_account(request, sub=self.sub, token=self.token, user_info=self.user_info)
  File "authentic2_auth_fc/views.py", line 411, in create_account
    return self.authenticate(request, sub=sub, token=token, user_info=user_info)

Fichiers

Révisions associées

Révision 86219adc (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

auth_fc: fix typo in views.py (#53409)

Révision 7f835356 (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

auth_fc: handle case of multiple FranceConnect accounts with same email (#53409)

Révision cf9121a0 (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

auth_fc: fix typo in views.py (#53409)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Projet changé de Suivi des traces à Plugin FS FranceConnect
  • Hors marché mis à Non
#2

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

  • Assigné à mis à Benjamin Dauvergne
#3

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

#4

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

Ok, cas fréquent de deux comptes fiscaux de conjoints (donc deux subs FC) avec une seule adresse email; j'ai ajouté un test.

J'ai du ajouter with atomic(): inutile sinon ça ne marche pas dans les tests (les tests tournant eux même dans une transaction implicite pour aller vite, on se trouve en statut transaction cassé et on ne peut pas continue dans a2_utils.authenticate() les "SELECT" foirent).

#5

Mis à jour par Valentin Deniaud il y a presque 3 ans

Benjamin Dauvergne a écrit :

J'ai du ajouter with atomic(): inutile sinon ça ne marche pas dans les tests (les tests tournant eux même dans une transaction implicite pour aller vite, on se trouve en statut transaction cassé et on ne peut pas continue dans a2_utils.authenticate() les "SELECT" foirent).

Il faut utiliser la fixture transactional_db.

#6

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

Valentin Deniaud a écrit :

Benjamin Dauvergne a écrit :

J'ai du ajouter with atomic(): inutile sinon ça ne marche pas dans les tests (les tests tournant eux même dans une transaction implicite pour aller vite, on se trouve en statut transaction cassé et on ne peut pas continue dans a2_utils.authenticate() les "SELECT" foirent).

Il faut utiliser la fixture transactional_db.

Non pas dans ce cas, si jamais on met un atomic plus haut un jour on aura le même comportement mais ce sera invisible jusqu'à ce que l'erreur apparaisse, on doit toujours utiliser une transaction si on attend une IntegrityError, parier sur la permanence d'autocommit n'est pas un bon pari et ça ne coûte rien de faire les choses proprement. Django fait pareil dans les implémentations de get_or_create/update_or_create.

#7

Mis à jour par Valentin Deniaud il y a presque 3 ans

OK mais si ce n'est pas juste pour faire marcher les tests, il faudrait adapter le commentaire pour le dire.

Aussi peut-être déplacer ce ticket ailleurs pour que jenkins le trouve ?

#8

Mis à jour par Frédéric Péters il y a presque 3 ans

Aussi peut-être déplacer ce ticket ailleurs pour que jenkins le trouve ?

On pourrait supprimer le sous-projet maintenant que le code a été intégré dans le dépôt principal, et peut-être utiliser une catégorie pour marquer ce qui relève de FranceConnect. (?)

(alternativement je modifie le code d'intégration pour y ajouter la correspondance du nom de projet) (je viens de faire ça, hop).

#10

Mis à jour par Valentin Deniaud il y a presque 3 ans

  • Statut changé de Solution proposée à Solution validée

Dernière remarque de forme,

email address \'%s\'
account of «%s»

Je pense qu'il faudrait que les deux manière de citer soient consistantes, et pour départager des deux que « en anglais ça ne s'utilise pas.

Ligne d'après il manque un espace à la fin Please create'.

#11

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 34b84935f605d95fff6a5c6990b47364ed4bed0f
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Mon Apr 26 15:24:43 2021 +0200

    auth_fc: handle case of multiple FranceConnect accounts with same email (#53409)

commit e43af1ff9f67a5467bda98928fcd1cfaa7d0cc3c
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Mon Apr 26 15:07:05 2021 +0200

    auth_fc: fix typo in views.py (#53409)
#12

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#13

Mis à jour par Serghei Mihai il y a presque 3 ans

Je vais créer une branche hotfix avec ce patch et mettre à jour les prods ce soir, sauf contre-ordre.

Formats disponibles : Atom PDF