datagouv / data.gouv.fr

Ce dépôt rassemble les tickets techniques qui portent sur data.gouv.fr.
https://www.data.gouv.fr
76 stars 14 forks source link

Erreur 500 lors du changement d'une adresse e-mail #1478

Open AntoineAugusti opened 1 week ago

AntoineAugusti commented 1 week ago

Description du bug

Le changement d'adresse e-mail semble impossible pour un membre de notre équipe au moins (Maxime Siret)

Comment reproduire le bug

Étapes à suivre pour faire apparaître le bug :

  1. Aller à https://www.data.gouv.fr/fr/admin/me
  2. Cliquer sur Éditer et renseigner une adresse e-mail, valider le formulaire
  3. Cliquer sur le lien reçu par e-mail
  4. Constater le bug

image

Autre identifiant d'erreur b722753e98c649e8ba190ffb3b660fa3

maudetes commented 1 week ago

L'erreur vient du fait que l'adresse mail était déjà utilisée par un autre compte existant. Snippet:

DuplicateKeyError: E11000 duplicate key error collection: udata.user index: email_1 dup key: { email: "xxx@xxx.fr" }, full error: {'index': 0, 'code': 11000, 'errmsg': 'E11000 duplicate key error collection: udata.user index: email_1 dup key: { email: "xxx@xxx.fr" }', 'keyPattern': {'email': 1}, 'keyValue': {'email': 'xxx@xxx.fr'}}
  File "flask/app.py", line 2077, in wsgi_app
    response = self.full_dispatch_request()
  File "flask/app.py", line 1525, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "flask_restx/api.py", line 674, in error_router
    return original_handler(e)
  File "flask_restx/api.py", line 674, in error_router
    return original_handler(e)
  File "flask/app.py", line 1523, in full_dispatch_request
    rv = self.dispatch_request()
  File "flask/app.py", line 1509, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "udata/auth/views.py", line 97, in confirm_change_email
    _datastore.put(user)
  File "flask_security/datastore.py", line 78, in put
    model.save()
  File "mongoengine/document.py", line 450, in save
    raise NotUniqueError(message % err)

Selon si on souhaite garder une réponse générique*, il faudrait retourner un succès quoi qu'il en soit. Mais si le mail est déjà existant, alors envoyer un mail indiquant que le mail existe déjà à l'image de ce qui est fait lors de la création de compte sur un mail déjà existant (welcome_existing.txt).

* Dans le cas des settings suivants (utilisés en production) :

SECURITY_RETURN_GENERIC_RESPONSES=True
SECURITY_CONFIRMABLE=True