amelioration(instructeur.connexion): ETQ instructeur, je peux redemander un lien de connexion securisé
This commit is contained in:
parent
3c410e48f3
commit
4974962abd
9 changed files with 76 additions and 21 deletions
|
@ -6,7 +6,7 @@ class Users::SessionsController < Devise::SessionsController
|
|||
layout 'login', only: [:new, :create]
|
||||
|
||||
before_action :restore_procedure_context, only: [:new, :create]
|
||||
|
||||
skip_before_action :redirect_if_untrusted
|
||||
# POST /resource/sign_in
|
||||
def create
|
||||
user = User.find_by(email: params[:user][:email])
|
||||
|
@ -18,6 +18,12 @@ class Users::SessionsController < Devise::SessionsController
|
|||
super
|
||||
end
|
||||
|
||||
def reset_link_sent
|
||||
send_login_token_or_bufferize(current_instructeur)
|
||||
flash[:notice] = "Nous venons de vous renvoyer un nouveau lien de connexion sécurisée à #{APPLICATION_NAME}"
|
||||
redirect_to link_sent_path(email: current_instructeur.email)
|
||||
end
|
||||
|
||||
def link_sent
|
||||
if Devise.email_regexp.match?(params[:email])
|
||||
@email = params[:email]
|
||||
|
|
|
@ -19,8 +19,8 @@ module TrustedDeviceConcern
|
|||
|
||||
def send_login_token_or_bufferize(instructeur)
|
||||
if !instructeur.young_login_token?
|
||||
login_token = instructeur.create_trusted_device_token
|
||||
InstructeurMailer.send_login_token(instructeur, login_token).deliver_later
|
||||
token = instructeur.create_trusted_device_token
|
||||
InstructeurMailer.send_login_token(instructeur, token).deliver_later
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Bonjour,
|
||||
|
||||
%p
|
||||
Veuillez cliquer sur le lien suivant pour vous connecter sur le site #{APPLICATION_NAME} :
|
||||
Veuillez cliquer sur le lien sécurisé suivant pour vous connecter à #{APPLICATION_NAME} :
|
||||
= link_to(sign_in_by_link_url(@instructeur_id, jeton: @login_token), sign_in_by_link_url(@instructeur_id, jeton: @login_token))
|
||||
|
||||
%p
|
||||
|
|
|
@ -7,11 +7,18 @@
|
|||
Vous venez d’être nommé instructeur sur #{APPLICATION_NAME}.
|
||||
|
||||
%p
|
||||
Votre compte a été créé pour l'adresse email #{@user.email}. Pour l’activer, nous vous invitons à cliquer sur le lien suivant :
|
||||
Votre compte a été créé pour l'adresse email
|
||||
%strong #{@user.email}.
|
||||
|
||||
%p
|
||||
Pour l’activer, nous vous invitons à cliquer sur le lien suivant :
|
||||
= link_to(users_activate_url(token: @reset_password_token), users_activate_url(token: @reset_password_token))
|
||||
|
||||
%p
|
||||
Par ailleurs, nous vous invitons à prendre quelques minutes pour consulter notre tutoriel à destination des nouveaux instructeurs :
|
||||
Lors de vos prochaines connexions sur Démarches simplifiées cliquez sur le bouton « Se connecter » positionné sur le haut de page ou bien sur ce lien :
|
||||
= link_to new_user_session_url, new_user_session_url
|
||||
%p
|
||||
Nous vous invitons aussi à consulter notre tutoriel à destination des nouveaux instructeurs :
|
||||
= link_to(INSTRUCTEUR_TUTORIAL_URL, INSTRUCTEUR_TUTORIAL_URL)
|
||||
|
||||
= render partial: "layouts/mailers/signature"
|
||||
|
|
|
@ -3,18 +3,27 @@
|
|||
- content_for :footer do
|
||||
= render partial: 'root/footer'
|
||||
|
||||
#link-sent.container
|
||||
= image_tag('user/confirmation-email.svg', "aria-hidden": true)
|
||||
%h1 Encore une petite étape :)
|
||||
.fr-container.fr-my-5w
|
||||
.fr-grid-row
|
||||
.fr-col-12.fr-col-offset-md-1.fr-col-md-7
|
||||
%h1.fr-mt-6w Encore une petite étape !
|
||||
|
||||
%section.link-sent-info
|
||||
%p
|
||||
Ouvrez votre boite email <strong>#{@email}</strong> puis cliquez sur le lien d’activation du message <strong>Connexion sécurisée à #{APPLICATION_NAME}</strong>.
|
||||
%p
|
||||
= t('views.users.shared.email_can_take_a_while_html')
|
||||
%section
|
||||
%p.fr-text--lead
|
||||
Nous venons de vous envoyer un courriel sur votre boite email <strong>#{@email}</strong>.
|
||||
Veuillez l’ouvrir et cliquer sur le lien de <strong>connexion sécurisée à #{APPLICATION_NAME}</strong>.
|
||||
|
||||
%section.link-sent-help
|
||||
%p
|
||||
%p.fr-text--lead
|
||||
Ce lien est <strong>valide une semaine</strong> et peut-être réutilisé <strong>plusieurs fois</strong>.
|
||||
|
||||
%p.fr-text--sm.fr-text-mention--grey
|
||||
Ce courriel peut mettre jusqu’à <strong>15 minutes</strong> pour arriver. Si vous n’avez pas reçu de courriel (n’hésitez pas à vérifier dans les indésirables), cliquez sur le bouton ci-dessous.
|
||||
|
||||
= button_to instructeurs_reset_link_sent_path, class: 'fr-btn fr-btn--secondary fr-btn--icon-left fr-icon-mail-line', method: 'POST' do
|
||||
Renvoyer le courriel
|
||||
|
||||
%section
|
||||
%p.fr-mt-3w
|
||||
Si vous voyez cette page trop souvent, consultez notre aide : #{link_to t("links.common.faq.confirmer_compte_chaque_connexion_url"), **external_link_attributes}
|
||||
%p
|
||||
%p.fr-mt-3w
|
||||
= t('views.users.shared.contact_us_if_any_trouble_html', href: contact_admin_url)
|
||||
|
|
|
@ -515,7 +515,7 @@ en:
|
|||
check_france_connect_html: Have you once logged in with France Connect? If yes, <a href=\"%{href}\">try again with France Connect</a>.
|
||||
check_gpdr: "The account may have been deleted in the event of prolonged inactivity and no current file. In this case you will have to recreate an account from a procedure."
|
||||
shared:
|
||||
email_can_take_a_while_html: <strong>Please note</strong> that this message can take up to 15 minutes to arrive.
|
||||
email_can_take_a_while_html: <strong>Please note</strong> that this email can take up to 15 minutes to arrive.
|
||||
contact_us_if_any_trouble_html: 'You can contact us <a href="%{href}">through this form</a> if a problem still exists.'
|
||||
modal:
|
||||
publish:
|
||||
|
|
|
@ -519,7 +519,7 @@ fr:
|
|||
open_your_mailbox: "Maintenant ouvrez votre boite email."
|
||||
title: "Lien de réinitialisation du mot de passe envoyé"
|
||||
shared:
|
||||
email_can_take_a_while_html: "<strong>Attention</strong>, ce message peut mettre jusqu’à <strong>15 minutes</strong> pour arriver."
|
||||
email_can_take_a_while_html: "<strong>Attention</strong>, ce courriel peut mettre jusqu’à <strong>15 minutes</strong> pour arriver."
|
||||
contact_us_if_any_trouble_html: 'En cas de difficultés, nous restons joignables <a href="%{href}">via ce formulaire</a>.'
|
||||
modal:
|
||||
publish:
|
||||
|
|
|
@ -125,6 +125,7 @@ Rails.application.routes.draw do
|
|||
get '/users/no_procedure' => 'users/sessions#no_procedure'
|
||||
get 'connexion-par-jeton/:id' => 'users/sessions#sign_in_by_link', as: 'sign_in_by_link'
|
||||
get 'lien-envoye' => 'users/sessions#link_sent', as: 'link_sent'
|
||||
post '/instructeurs/reset-link-sent' => 'users/sessions#reset_link_sent'
|
||||
get '/users/password/reset-link-sent' => 'users/passwords#reset_link_sent'
|
||||
end
|
||||
|
||||
|
|
|
@ -244,4 +244,36 @@ describe Users::SessionsController, type: :controller do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#reset_link_sent' do
|
||||
let(:instructeur) { create(:instructeur, user: user) }
|
||||
before { sign_in(user) }
|
||||
subject { post :reset_link_sent }
|
||||
|
||||
context 'when the instructeur is signed without trust_device_token' do
|
||||
it 'send InstructeurMailer.send_login_token' do
|
||||
expect(InstructeurMailer).to receive(:send_login_token).with(instructeur, anything).and_return(double(deliver_later: true))
|
||||
expect { subject }.to change { instructeur.trusted_device_tokens.count }.by(1)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the instructeur is signed with an young trust_device_token' do
|
||||
before { instructeur.create_trusted_device_token }
|
||||
it 'doesnot send InstructeurMailer.send_login_token' do
|
||||
expect(InstructeurMailer).not_to receive(:send_login_token)
|
||||
expect { subject }.to change { instructeur.trusted_device_tokens.count }.by(0)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the instructeur is signed with an old trust_device_token' do
|
||||
let(:token) { instructeur.create_trusted_device_token }
|
||||
before do
|
||||
travel_to 15.minutes.from_now
|
||||
end
|
||||
it 'send InstructeurMailer.send_login_token' do
|
||||
expect(InstructeurMailer).to receive(:send_login_token).with(instructeur, anything).and_return(double(deliver_later: true))
|
||||
expect { subject }.to change { instructeur.trusted_device_tokens.count }.by(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue