Vue d'ensemble
- Espace de noms
Websource\SocialLogin, classes danssrc/(PSR-4, chargeur intégré, aucune dépendance Composer). - OAuth 2.0 « Authorization Code » ; OpenID Connect pour Google, LinkedIn, Microsoft et Apple (id_token RS256 vérifié avec le JWKS du réseau :
iss,aud,azp,exp,iat,nbf,nonce). statede 32 octets, à usage unique, valable 10 minutes, lié au navigateur par le cookiewssl_bind(HttpOnly, SameSite=Lax ; None pour Apple qui répond en POST). PKCE S256 quand le réseau le gère.- Aucun jeton d'accès n'est conservé. Les secrets sont chiffrés (libsodium
secretbox, clé dérivée dewp_salt('secure_auth')).
Blocs
| Bloc | Attributs | Rendu |
|---|---|---|
websource/sociallogin | place (string, login par défaut : login, register, checkout, header, wishlist) ; force (bool, true par défaut : ignore le réglage « Où afficher les boutons ») | Boutons des réseaux actifs, pour les visiteurs non connectés. Vide si aucun réseau actif. |
websource/sociallogin-account | aucun | Liste « Connexions sociales » de l'utilisateur connecté (lier / délier). |
Les deux blocs sont rendus côté serveur (block.json, render_callback). L'éditeur est écrit avec wp.element.createElement, sans étape de build (blocks/editor.js).
Shortcodes
[websource_sociallogin place="login" force="1"]
[websource_sociallogin place="header"]
[websource_sociallogin_account]
force="0" respecte le réglage des emplacements. L'emplacement header impose la présentation compacte (grille d'icônes, sans mention RGPD).
Emplacements automatiques
| Emplacement | Hook utilisé |
|---|---|
login | filtre login_message (wp-login.php), action woocommerce_login_form_end |
register | filtre login_message (action=register), action woocommerce_register_form_start |
checkout | action woocommerce_before_checkout_form (commande classique), filtre render_block_woocommerce/checkout (commande en blocs) |
header, wishlist | aucun hook automatique : bloc, shortcode ou action de thème |
| Connexions sociales | point de terminaison WooCommerce social-logins dans « Mon compte » ; page /websource-sociallogin/account et section du profil sans WooCommerce |
Action de thème :
<?php do_action('websource_sociallogin', 'header'); ?>
Les feuilles assets/css/front.css et assets/js/front.js ne sont chargées que sur les pages où des boutons ou une page de l'extension sont rendus.
Adresses
| Adresse | Méthode | Rôle |
|---|---|---|
/websource-sociallogin/start?provider=<id>&back=<url> | GET (visiteur) | Crée le state, pose le cookie de liaison, redirige vers le réseau. back : chemin du site ou URL du domaine du site, sinon ignoré. |
/websource-sociallogin/start | POST (utilisateur connecté) | Liaison depuis « Connexions sociales ». Champs : provider, wssl_link=1, _wssl_nonce (action wsx_sl_account). |
/websource-sociallogin/callback | GET, POST (Apple) | URL de redirection à enregistrer chez le réseau. Paramètres : state, code, error. |
/websource-sociallogin/pending?type=confirm\|email\|verify&t=<jeton> | GET, POST | Confirmation par mot de passe, saisie de l'e-mail, lien de vérification. |
/websource-sociallogin/account | GET | Connexions sociales (redirige vers « Mon compte » avec WooCommerce). |
Sans permaliens, les mêmes adresses s'écrivent /?wsx_sl=start, /?wsx_sl=callback, etc. Ces adresses ne sont pas des routes REST : elles ont besoin du cookie de session de WordPress.
Exemple de démarrage :
GET /websource-sociallogin/start?provider=google&back=%2Fboutique%2F
→ 302 Location: https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=…&redirect_uri=https%3A%2F%2Fvotre-site.fr%2Fwebsource-sociallogin%2Fcallback&scope=openid%20email%20profile&state=…&nonce=…&code_challenge=…&code_challenge_method=S256
En cas d'échec, l'utilisateur est renvoyé vers la page de connexion avec ?wsx_sl_msg=<clé> (err_session, err_provider, err_cancelled, err_rate, err_unavailable, err_csrf, err_disabled, err_linked_other, err_already_provider, err_attempts, err_registration_closed, msg_linked, msg_unlinked). Seules les clés connues sont affichées.
Routes REST
L'extension n'enregistre aucune route REST.
Actions
| Action | Paramètres | Moment |
|---|---|---|
websource_sociallogin | string $place | À appeler dans un gabarit pour afficher les boutons. |
websource_sociallogin_register_providers | ProviderRegistry $registry | Ajout d'un réseau. |
websource_sociallogin_user_created | int $userId, array $profile | Après la création d'un compte par connexion sociale. |
websource_sociallogin_event | string $event, string $provider, string $code, int $userId | Journal : start, login, created, linked, unlinked, confirm_failed, error, rate_limited, mail_sent. Avec WooCommerce, les mêmes lignes vont dans le journal websource-sociallogin. |
L'action WordPress wp_login est déclenchée à chaque connexion sociale.
Filtres
| Filtre | Valeur | Rôle |
|---|---|---|
websource_sociallogin_redirect_uri | string | URL de redirection envoyée aux réseaux. |
websource_sociallogin_default_redirect | string | Destination après connexion quand aucune adresse de retour n'est connue (Mon compte, sinon l'accueil). |
websource_sociallogin_login_redirect | string $url, WP_User $user, string $provider, bool $created | Destination finale après connexion. |
websource_sociallogin_allow_registration | bool | Autorise la création de comptes (par défaut : WooCommerce actif ou « Tout le monde peut s'inscrire »). |
websource_sociallogin_user_can_login | bool, WP_User $user | Permet d'interdire la connexion sociale à certains comptes (par exemple les administrateurs). |
websource_sociallogin_allow_insecure_http | bool, string $url | Autorise un appel sortant en http://. À réserver aux essais en local. |
Exemple : interdire la connexion sociale aux administrateurs.
add_filter('websource_sociallogin_user_can_login', function ($ok, $user) {
return $ok && !user_can($user, 'manage_options');
}, 10, 2);
Ajouter un réseau
Implémentez Websource\SocialLogin\Provider\ProviderInterface (ou étendez OidcProvider pour un fournisseur OpenID Connect), puis enregistrez-le :
add_action('websource_sociallogin_register_providers', function ($registry) {
$registry->register(new Mon_Reseau_Provider());
});
Méthodes à fournir pour OidcProvider : id(), label(), defaultScopes(), usesPkce(), authorizeEndpoint(), tokenEndpoint(), jwksUrl(), issuer(), profileFromClaims(). L'identifiant suit ^[a-z][a-z0-9]{0,19}$. Le réseau apparaît alors dans l'écran de réglages avec ses champs.
Données
| Élément | Contenu |
|---|---|
Option wsx_sociallogin_settings | Réglages (clés WSSL_*). Secrets préfixés enc1:. |
Table {prefix}wsx_sociallogin_link | user_id, blog_id, provider, provider_user_id, email, consent_date, date_add, date_last_login. Unique par réseau + identifiant + site, et par utilisateur + réseau. |
Table {prefix}wsx_sociallogin_flow | États OAuth et étapes intermédiaires : empreinte du jeton, type, charge utile JSON, empreinte du navigateur et de l'IP, échéance. Purgée à chaque création. |
Transients wsx_sl_jwks_* | Clés publiques des réseaux (6 heures). |
| Cookies | wssl_bind (1 heure, HttpOnly), wssl_last (180 jours). |
Limite de débit : 30 démarrages par tranche de 10 minutes et par adresse IP.
Variables CSS
Les boutons héritent du thème par des variables, toujours avec une valeur de repli.
| Variable | Rôle |
|---|---|
--wssl-radius, --wssl-border-w, --wssl-bg, --wssl-fg, --wssl-bc | Posées par les réglages d'apparence sur le conteneur .wssl. |
--color-ink, --color-line, --color-surface | Texte, bordures et fond repris du thème Websource. |
--color-brand-50 à --color-brand-800 | Style « Neutre », survol, boutons d'action des pages de l'extension. |
--color-accent-500 | Pastille « Dernier utilisé ». |
--radius-xl | Arrondi par défaut. |
Classes utiles : .wssl, .wssl--outline|brand|neutral, .wssl--stack|grid, .wssl--place-<emplacement>, .wssl-btn, .wssl-btn--<réseau>, .wssl-page, .wssl-rows, .wssl-notice.
Fonctions publiques
$plugin = Websource\SocialLogin\Plugin::instance();
$plugin->redirectUri(); // URL de redirection
$plugin->endpointUrl('start', ['provider' => 'google']);
$plugin->activeProviders(); // ProviderInterface[]
$plugin->buttons()->render('login', false, true); // HTML des boutons
$plugin->account()->render(false); // HTML de « Connexions sociales »
$plugin->links()->listForCustomer($userId);
Traduction
Domaine websource-sociallogin, chaînes sources en anglais, languages/websource-sociallogin-fr_FR.po|.mo. Les textes saisis (« Texte du bouton », « Mention RGPD ») sont déclarés à Polylang (pll_register_string) et à WPML (wpml-config.xml, wpml_register_single_string). Les guides pas à pas sont fournis en français et en anglais (src/Guide/data_fr.php, data_en.php).