Projet

Général

Profil

Development #45710

TypeError: Object of type date is not JSON serializable

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
03 août 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

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

File "/usr/lib/python3/dist-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/usr/lib/python3/dist-packages/authentic2/views.py" in dispatch
  905.             .dispatch(request, *args, **kwargs)

File "/usr/lib/python3/dist-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/usr/lib/python3/dist-packages/authentic2/views.py" in post
  1062.         return super(RegistrationCompletionView, self).post(request, *args, **kwargs)

File "/usr/lib/python3/dist-packages/django/views/generic/edit.py" in post
  217.         return super(BaseCreateView, self).post(request, *args, **kwargs)

File "/usr/lib/python3/dist-packages/django/views/generic/edit.py" in post
  183.             return self.form_valid(form)

File "/usr/lib/python3/dist-packages/authentic2/views.py" in form_valid
  1083.                 **data)

File "/usr/lib/python3/dist-packages/authentic2/utils/__init__.py" in send_registration_mail
  728.                                             **kwargs)

File "/usr/lib/python3/dist-packages/authentic2/utils/__init__.py" in build_activation_url
  698.     registration_token = signing.dumps(data)

File "/usr/lib/python3/dist-packages/django/core/signing.py" in dumps
  115.     data = serializer().dumps(obj)

File "/usr/lib/python3/dist-packages/django/core/signing.py" in dumps
  93.         return json.dumps(obj, separators=(',', ':')).encode('latin-1')

File "/usr/lib/python3.7/json/__init__.py" in dumps
  238.         **kw).encode(obj)

File "/usr/lib/python3.7/json/encoder.py" in encode
  199.         chunks = self.iterencode(o, _one_shot=True)

File "/usr/lib/python3.7/json/encoder.py" in iterencode
  257.         return _iterencode(o, 0)

File "/usr/lib/python3.7/json/encoder.py" in default
  179.         raise TypeError(f'Object of type {o.__class__.__name__} '

...

Fichiers

Révisions associées

Révision 079102d8 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 3 ans

misc: unserialize attribute in registration view (#45710)

Registration view pass attribute values in JSON tokens, so we need to
get a JSON compatible serialization of attribute values for the token
using their serialization function.

Révision 5f1da414 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 3 ans

misc: unserialize attribute in registration view (#45710)

Registration view pass attribute values in JSON tokens, so we need to
get a JSON compatible serialization of attribute values for the token
using their serialization function.

Historique

#1

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

  • Projet changé de Suivi des traces à Authentic 2
#2

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

  • Description mis à jour (diff)

Dans l'info sentry, on peut voir que ça semble se faire au retour de création de compte via FC, next_url: /fc/callback/?next=/idp/saml2/continue%3Fnonce%3D_897F22D3EB9FFBDB80AB8A57C0AF82C2&service=eservices'

#3

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

Je suis un peu perdu sur celle-ci, le code qui appelle send_registration_mail est conditionné par ça :

        if ('email' in self.request.POST
                and ('email' not in self.token or self.request.POST['email'] != self.token['email'])
                and not self.token.get('skip_email_check')):

et dans la trace sentry on ne voit justement pas 'email' dans le POST, je ne comprends pas très bien comment on arrive ici donc.

#4

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

  • Assigné à mis à Benjamin Dauvergne
Bon je pense que sentry cache le champs posté nommé email, ce qui s'est passé :
  • Arles a ajouté un champs requis acceptation_cgu
  • ça bloque l'enregistrement automatique pour FranceConnect, on s'arrête désormais systématiquement sur la page d'enregistrement pour que les gens y coche cette case
  • à cette occasion la personne a changé son email de celle fournie par FranceConnect et a renseigné sa date de naissance
  • lors de la création du jeton pour la nouvelle URL d'activiation, la sérialisation de l'objet date() a foiré, ça n'est pas JSON compatible (django.core.signing.dumps()/loads() utilise une sérialisation JSON).
#5

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

C'est vraiment pas le fix que je voudrai faire, parce que la gestion du jeton passé de vue en vue laisse à désirer (repasse le contenu tel quel au formulaire ne marche vraiment pas en fait), mais pour l'instant ça fera l'affaire.

#6

Mis à jour par Serghei Mihai il y a plus de 3 ans

  • Statut changé de Solution proposée à En cours
 import pdb
 pdb.set_trace()
#8

Mis à jour par Serghei Mihai il y a plus de 3 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 079102d8515c610297e8709bd5a50ab399589035
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Aug 13 15:43:49 2020 +0200

    misc: unserialize attribute in registration view (#45710)

    Registration view pass attribute values in JSON tokens, so we need to
    get a JSON compatible serialization of attribute values for the token
    using their serialization function.
#10

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

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

Formats disponibles : Atom PDF