Déconnexion - betagouv/omniauth-proconnect GitHub Wiki
La déconnexion d'un utilisateur est légèrement plus complexe à travers un fournisseur OIDC : une fois que l'utilisateur clique "Déconnexion", vous devez aussi le déconnecter du côté de ProConnect sinon vous créez une situation asymétrique (et pénible) où votre utilisateur est déconnecté chez vous mais pas côté ProConnect.
Pour remédier à ça, le protocole OIDC décrit une cinématique très simple où
l'utilisateur est envoyé sur le fournisseur d'identité (ici, ProConnect) pour se
déconnecter après quoi il est renvoyé sur une URL précise côté client, la
fameuse post_logout_redirect_uri
qui indique "l'utilisateur s'est bien
déconnecté côté FI, à vous".
Commencez par renseignez votre URL de déconnexion sur l'Espace Partenaires de
ProConnect, qui dans ce guide sera
http://localhost:3000/auth/proconnect/logged_out
.
Ensuite, une implémentation minimale ressemblerait à ça :
--- config/initializers/omniauth.rb
+++ config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider(
:proconnect,
{
# [...]
+ post_logout_redirect_uri: "http://localhost:3000/auth/proconnect/logged_out"
}
)
end
--- config/routes.rb
+++ config/routes.rb
+delete "/logout", to: "sessions#destroy"
+get "/auth/proconnect/logged_out", to: "sessions#proconnect_logged_out"
--- app/controllers/sessions_controller.rb
+++ app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
# [...]
+ def destroy
+ redirect_to "/auth/proconnect/logout" # intercepté par la stratégie
+ end
+
+ def proconnect_logged_out
+ clear_proconnect_setup!
+ end
+
+ private
+
+ def clear_proconnect_setup!
+ session
+ .to_hash
+ .select { |k, _| k.include?("omniauth.pc") } # préfixe de stockage de la stratégie
+ .each_key { |k| session.delete(k) }
+ end
end