Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(user): authentification via un lien magique envoyé par email #804

Merged
merged 11 commits into from
Nov 14, 2024

Conversation

vincentporte
Copy link
Contributor

@vincentporte vincentporte commented Nov 4, 2024

Description

🎸 En complément de l'authentification via Pro Connect (#731), permettre à un utlisateur de s'authentifier via un lien magique envoyé par email.
🎸 Nécessaire pour les utilisateurs n'appartenant pas à une organisation, car ils ne peuvent pas utiliser Pro Connect

🐻 La vue principale de connexion est désormais LoginView. Elle permet de recevoir un magic link ou de se connecter avec ProConnect.
🐻 Si l'utilisateur se connecte avec un lien magic, une variable est positionnée dans sa session pour determiner le mécanisme de déconnection à actionner.
🐻 LoginView n'est plus accessible si l'utilisateur est authentifié.

⚠️ edge case
Un utilisateur demande un magic link, puis se connecter avec ProConnect, puis clique sur le magic link. La déconnection pourrait être celle du magic link (pas de déco ProConnect). Pas d'effet de bord catastrophique attendu.

Type de changement

🎢 Nouvelle fonctionnalité (changement non cassant qui ajoute une fonctionnalité).
🚧 technique

Points d'attention

🦺 ajout de la méthode clean_next_url pour limiter les risques sur les redirections
🦺 en dev, les magic link sont enregistrés dans EmailSentTrack
🦺 ref https://www.honeybadger.io/blog/options-for-passwordless-authentication-in-django/
🦺 ref https://stackoverflow.com/a/46236585

🦺 pour une PR suivante : ajouter le contrôle sur BlockedEmail et sur BlockedDomainName pour prévenir d'eventuels spammers

Captures d'écran (optionnel)

LoginView
image

CreateUserView
image

Login Link Sent
image

@vincentporte vincentporte added python Pull requests that update Python code templating labels Nov 4, 2024
@vincentporte vincentporte self-assigned this Nov 4, 2024
@vincentporte vincentporte requested a review from tonial November 4, 2024 16:12
@vincentporte vincentporte changed the base branch from master to 729-user-bascule-ic-proc November 4, 2024 16:12
@vincentporte vincentporte linked an issue Nov 7, 2024 that may be closed by this pull request
@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch 3 times, most recently from 5a0c264 to a581fcb Compare November 7, 2024 13:19
lacommunaute/forum_member/views.py Fixed Show fixed Hide fixed
lacommunaute/forum_member/views.py Fixed Show fixed Hide fixed
@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch from 130e2bb to 2b8ddfe Compare November 7, 2024 18:34
lacommunaute/forum_member/views.py Fixed Show resolved Hide resolved
Copy link

@tonial tonial left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ça me parait bien !

Je pense que ça vaut le coup d'avoir un test sur l'envoi de lien et son sur ce qui se passe quand on clique dessus + vérifier qu'on ne peut pas réutiliser le même lien après s'être déconnecté (normalement le token dépend des camps de user, donc quand on change last_login ça devrait rendre les token précédemment générés obsolète, mais autant s'en assurer)
Je ne sais pas si c'est utile de vérifier si les tokens ont une durée de vie par contre.

Et un test qui rend explicite si un utilisateur ProConnect peut utiliser un lien magique serait sans doute utile au cas où.

@vincentporte vincentporte changed the title feat(user): authentification via un lien magique envoyé par emal feat(user): authentification via un lien magique envoyé par email Nov 12, 2024
@vincentporte vincentporte added recette-jetable review_app and removed recette-jetable review_app labels Nov 12, 2024
@vincentporte vincentporte force-pushed the 729-user-bascule-ic-proc branch from 9a74169 to a9c801e Compare November 13, 2024 13:28
@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch from 334f141 to 691a0a5 Compare November 13, 2024 13:29
lacommunaute/forum_member/views.py Fixed Show resolved Hide resolved
lacommunaute/notification/emails.py Fixed Show resolved Hide resolved
@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch from 02bc25b to a7bfae4 Compare November 13, 2024 14:30
@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch from 036b3bc to 95e956e Compare November 13, 2024 23:19
@vincentporte vincentporte marked this pull request as ready for review November 14, 2024 07:57
@vincentporte vincentporte added the recette-jetable review_app label Nov 14, 2024
@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch 3 times, most recently from df6251e to 4556d2b Compare November 14, 2024 10:30
@vincentporte vincentporte removed the recette-jetable review_app label Nov 14, 2024
Base automatically changed from 729-user-bascule-ic-proc to master November 14, 2024 12:17
@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch from 4556d2b to 35a9a3c Compare November 14, 2024 12:28
@vincentporte vincentporte added the recette-jetable review_app label Nov 14, 2024
Copy link
Contributor

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

@vincentporte vincentporte force-pushed the vp/729-part2-email-magic-link branch from 35a9a3c to ef5e47b Compare November 14, 2024 12:40
@vincentporte vincentporte removed the recette-jetable review_app label Nov 14, 2024
@vincentporte vincentporte merged commit 64e04a3 into master Nov 14, 2024
8 of 9 checks passed
@vincentporte vincentporte deleted the vp/729-part2-email-magic-link branch November 14, 2024 12:52
vincentporte pushed a commit that referenced this pull request Nov 14, 2024
🤖 I have created a release *beep* *boop*
---


##
[2.17.0](v2.16.0...v2.17.0)
(2024-11-14)


### Features

* ajout d'une balise youtube dans le markdown
([#810](#810))
([adbff17](adbff17))
* **forum_conversation:** suppression du triage avant de pouvoir poser
une question
([#818](#818))
([f1b64c6](f1b64c6))
* **stats:** ajout de la colonne categorie dans les stats des fiches
pratiques
([#812](#812))
([c072b5f](c072b5f))
* **user:** authentification via un lien magique envoyé par email
([#804](#804))
([64e04a3](64e04a3))
* **user:** basculer l'authentification vers ProConnect
([#731](#731))
([5429fce](5429fce))


### Bug Fixes

* **attachment:** affichage des liens vers les fichiers des messages
([#806](#806))
([7c34605](7c34605))
* **metabase:** deplanification d'une tâche résiduelle
([#808](#808))
([692a274](692a274))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
python Pull requests that update Python code templating
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[USER] se connecter avec un email
2 participants