Remplacer l'authentification par mot de passe par le code de connexion pour les usagers#6204
Remplacer l'authentification par mot de passe par le code de connexion pour les usagers#6204Holist wants to merge 31 commits intoproductionfrom
Conversation
…ouv/rdv-service-public into remove_user_invitation_to_register
…n pour les usagers
| @@ -1,112 +1,4 @@ | |||
| RSpec.describe CustomDeviseMailer, "#domain" do | |||
| subject(:sent_email) { described_class.reset_password_instructions(user, "t0k3n") } | |||
There was a problem hiding this comment.
Tout ça n'avait plus grand chose à faire la et a été déplacé dans spec/models/user_spec.rb
There was a problem hiding this comment.
En effet, ça teste User#domain, bien vu !
| @@ -1,112 +1,4 @@ | |||
| RSpec.describe CustomDeviseMailer, "#domain" do | |||
| subject(:sent_email) { described_class.reset_password_instructions(user, "t0k3n") } | |||
There was a problem hiding this comment.
En effet, ça teste User#domain, bien vu !
…r removed devises modules in User model
aminedhobb
left a comment
There was a problem hiding this comment.
Merci @Holist , trop cool de voir tout ce code enlevé 👏 🫶 !!
J'ai juste quelques questions que je t'ai posé ici.
Aussi qu'est-ce qu'il se passe quand des usagers vont cliquer sur les anciens liens d'invitation à se créer un compte après cette PR ?
|
|
||
| def self.should_send_sms_to_user?(user:, rdv:, author:) | ||
| author != user || !user.confirmed? || rdv.starts_at < 2.days.from_now | ||
| author != user || user.confirmed_at.nil? || rdv.starts_at < 2.days.from_now |
There was a problem hiding this comment.
gros nitpick: personnellement j'aurais garder l'alias de confirmed? à confirmed_at?, c'est plus beau sémantiquement et si on doit rajouter de la logique de confirmation ce serait plus facile
There was a problem hiding this comment.
A ce sujet cette PR de @francois-ferrandis qu'on va merge avant : #6221
There was a problem hiding this comment.
Après discussions avec @francois-ferrandis , on a donc remplacé confirmed? et le champ confirmed_at par already_logged_in? et latest_login_at
app/services/users/login_service.rb
Outdated
| if matching_login_code&.usable? | ||
| @user = upsert_user | ||
| user.confirm | ||
| user.update!(confirmed_at: Time.zone.now) if user.confirmed_at.nil? |
There was a problem hiding this comment.
Je trouve ça peut-être dommage que tous les types de connexions mettent à jour la même colonne confirmed_at de la même façon.
On ne saura pas distinguer les connexions via login code, fc et password
There was a problem hiding this comment.
A ce sujet cette PR de @francois-ferrandis qu'on va merge avant : #6221
There was a problem hiding this comment.
On a remplacé cette ligne par user.update!(latest_login_at: Time.zone.now) dans #6221
…tagouv/rdv-service-public into replace_user_password_with_login_code
Comme je l'avais précisé dans la description de la PR précédente les anciens liens d'invitations donneront une 404. On peut toujours mettre en place un système de redirection vers le |
| @@ -0,0 +1,14 @@ | |||
| class BackfillLatestLoginAtFromConfirmedAt < ActiveRecord::Migration[7.2] | |||
| def up | |||
| safety_assured { execute(<<~SQL.squish) } | |||
There was a problem hiding this comment.
@francois-ferrandis pour information. Je récupère les infos du confirmed_at qui passe dans ignored_columns
| user = User.find_or_initialize_by(pro_connect_openid_sub: callback_client.openid_sub) | ||
|
|
||
| user.confirmed_at ||= Time.zone.now # Nécessaire pour que Devise autorise la connexion | ||
| user.latest_login_at ||= Time.zone.now |
There was a problem hiding this comment.
Est-ce que c'est pas plutôt un update write à tous les coups ?
user.latest_login_at = Time.zone.nowEt d'ailleurs ça pourrait être fusionné avec le update! juste en dessous.
aminedhobb
left a comment
There was a problem hiding this comment.
Vu avec @Holist en live, ça m'a l'air top 🚀 !
| def create | ||
| prepare_create | ||
| authorize(@user, policy_class: Agent::UserPolicy) | ||
| @user.skip_confirmation_notification! |
There was a problem hiding this comment.
Quel kiff d'enlever tous ces skip_* 😄
En lien avec #5481
Suite de #6203
Supprime l'authentification par mot de passe pour les usagers
Les usagers passent désormais exclusivement par le code de connexion par email (déjà en place). Cette PR retire tout le code lié au mot de passe côté usager.
Modules Devise supprimés du modèle
User::confirmable, :recoverable, :validatable, :database_authenticatable, :registerableFichiers supprimés :
users/passwords_controller.rb+ vues (réinitialisation de mot de passe)users/confirmations_controller.rb(confirmation de compte par email)users/registrations/new.html.slim+Users::RegistrationForm(inscription)SpecscorrespondantesChoix d'architecture :
La colonne
confirmed_atest remplacée parlatest_login_atplus juste sémantiquement (colonne mise en place dans cette pr).Adaptations :
devise_scoperegistration_path(resource_name)de Devise disparaît quand un seul scope a:registerable→ remplacé paragent_registration_pathNon traité dans cette PR (prévu séparément) :
Prochaines étapes :
emailetnotification_email)