Hooks utilisés
| Hook | Rôle |
|---|---|
displayCustomerLoginFormAfter | Boutons sous le formulaire de connexion (hook natif). |
displayWebsourceSocialLogin | Hook du module pour les autres emplacements, paramètre place. |
displayCustomerAccount | Tuile « Connexions sociales » du compte client. |
actionFrontControllerSetMedia | views/css/front.css et script des boutons. |
actionDeleteGDPRCustomer, actionExportGDPRData, actionObjectCustomerDeleteAfter | Suppression et export des liaisons avec le compte client. |
Emplacements dans un thème
{* Page de création de compte : templates/customer/registration.tpl *}
{hook h='displayWebsourceSocialLogin' place='register'}
{* Tunnel de commande : templates/checkout/_partials/steps/personal-information.tpl *}
{hook h='displayWebsourceSocialLogin' place='checkout'}
{* Menu « Mon compte » de l'en-tête (visiteur) *}
{hook h='displayWebsourceSocialLogin' place='header'}
{* Fenêtre de connexion de la liste de souhaits *}
{hook h='displayWebsourceSocialLogin' place='wishlist'}
{* Page de connexion, si le thème n'appelle pas le hook natif *}
{hook h='displayCustomerLoginFormAfter'}
Un emplacement n'est rendu que s'il est coché dans « Où afficher les boutons », qu'au moins un réseau est actif et complet, et que le visiteur n'est pas connecté.
Contrôleurs publics
| Contrôleur | Rôle |
|---|---|
start | Départ : crée le flux (state, nonce, PKCE), pose le cookie de liaison, redirige vers le réseau. Paramètre : identifiant du réseau, page de retour (liste blanche). |
callback | Retour du réseau (GET, ou POST pour Apple) : échange du code, lecture du profil, connexion, création ou demande de liaison. C'est l'URL de rappel à enregistrer chez le réseau. |
pending | Étapes intermédiaires : saisie du mot de passe pour lier un compte existant, saisie et confirmation de l'e-mail quand il est absent ou non vérifié (lien valable 1 heure). |
account | Page « Connexions sociales » : lier, délier. |
URL de rappel : https://<boutique>/index.php?fc=module&module=websourcesociallogin&controller=callback ou, avec URL simplifiées, https://<boutique>/<langue par défaut>/module/websourcesociallogin/callback. Toujours en https, identique pour toutes les langues d'un domaine.
Déroulé d'une connexion
- Clic sur un bouton :
start. - Retour sur
callback: - compte social déjà lié : connexion ; - e-mail vérifié par le réseau et client existant : mot de passe demandé (pending), puis liaison ; - e-mail vérifié et inconnu : création du client (mot de passe aléatoire, groupe par défaut, newsletter et offres partenaires non cochées), puis connexion ; - e-mail non vérifié ou absent : saisie de l'e-mail et lien de confirmation.
Réseaux
| Réseau | Protocole | PKCE | Champs |
|---|---|---|---|
google | OpenID Connect (id_token vérifié) | S256 | client_id, client_secret |
facebook | OAuth 2.0 (profil par API) | non | client_id, client_secret |
x | OAuth 2.0 (profil par API) | S256 | client_id, client_secret |
linkedin | OpenID Connect | non | client_id, client_secret |
microsoft | OpenID Connect | S256 | client_id, client_secret, tenant (défaut common) |
apple | OpenID Connect, retour en POST | non | Services ID, Team ID, Key ID, clé privée .p8 |
github | OAuth 2.0 (profil par API) | S256 | client_id, client_secret |
Scopes par défaut : Google openid email profile, Facebook public_profile email, X users.read tweet.read users.email, LinkedIn et Microsoft openid profile email, Apple name email, GitHub read:user user:email.
Sécurité
stateà usage unique lié au navigateur (cookie de liaison),nonce, PKCE S256 quand le réseau le propose.- Validation de l'id_token : signature (JWKS), émetteur, audience, expiration,
nonce(Security\IdTokenValidator,Security\Jwt). - Secrets chiffrés en base, jamais renvoyés dans la page.
- Jamais de fusion automatique de comptes ; redirections de retour en liste blanche ; limitation du taux.
- Aucun jeton d'accès conservé.
Données
| Clé / table | Contenu |
|---|---|
{prefix}websourcesociallogin_link | id_link, id_customer, id_shop, provider, provider_user_id, email, consent_date, date_add, date_last_login |
{prefix}websourcesociallogin_flow | id_flow, token_hash, type, payload (state, vérificateur PKCE, nonce, étape), bind_hash, ip_hash, id_shop, expires, created |
WSSL_* (Configuration, par boutique) | Réseaux (activation, identifiants, scopes, position), style, emplacements, textes par langue. |
Formulaire de configuration
POST sur index.php?controller=AdminModules&configure=websourcesociallogin&token=… avec wssl_token :
| Champ | Rôle |
|---|---|
wssl_save | Enregistre tout l'écran. |
wssl_test = identifiant du réseau | Lance le test de configuration de ce réseau. |
p[<réseau>][enabled], p[<réseau>][<champ>], p[<réseau>][scopes], p[<réseau>][position], p[<réseau>][clear][<champ>] | Réglages d'un réseau. |
style[…] (dont style[icon_only]), separator, remember, places[] | Apparence et emplacements (login, register, checkout, header, wishlist). |
label[id_lang], gdpr[id_lang] | Textes par langue. |
Template et CSS
Templates views/templates/hook/buttons.tpl, account-tile.tpl, views/templates/front/account.tpl, pending.tpl, surchargeables dans themes/<theme>/modules/websourcesociallogin/views/templates/…. Variable Smarty $wssl : class, style, title, separator, separator_pos, separator_text, buttons[] (id, url, label, aria, icon, last), gdpr, last_label.
Classes : .wssl, .wssl__sep, .wssl__list, .wssl__legal, .wssl-btn, .wssl-btn--<réseau>, .wssl-btn__logo, .wssl-btn__label, .wssl-btn__badge, .is-last. La feuille reprend les variables du thème (--color-brand-*, --color-line, --radius-xl…) avec des valeurs de repli.
Ajouter un réseau
- Créer
src/Provider/MonReseauProvider.php(interfaceWebsource\SocialLogin\Provider\ProviderInterface; étendreOidcProviderpour OpenID Connect, sinonAbstractProvider) :id(),label(),fields(),defaultScopes(),usesPkce(),usesFormPost(),buildAuthorizationUrl(…),fetchProfile(…)qui renvoie unProfile(identifiant, e-mail, e-mail vérifié, prénom, nom). - L'enregistrer dans
ProviderRegistry::default(). - Ajouter son guide dans
src/Guide/data_fr.phpetdata_en.php(intro,console,steps,scopes,errors,links) et son logo danssrc/Render/IconLibrary.php. - Lancer
php tests/run.php.
La liaison et l'anti-prise de compte sont gérées par Linking\LinkingService et Flow\FlowService : un fournisseur doit seulement renvoyer un Profile fiable et indiquer honnêtement si l'e-mail est vérifié.
Tests
php tests/run.php : PKCE, state, id_token signés localement, fournisseurs avec client HTTP factice, liaison, redirections, styles, guides, traductions. L'authentification réelle auprès des réseaux n'est pas couverte.