# Inloggen met Google, Apple en Facebook voor PrestaShop: documentatie DataFirefly Social Connect

> Overzicht DataFirefly Social Connect voegt aan PrestaShop 8 en 9 inloggen en registreren met één klik toe via Google, Apple en Facebook. De knoppen verschijnen op de inlogpagina, op de…

- Pagina: <https://www.datafirefly.com/nl/documentation/dfsocialconnect/>
- Taal: nl
- Bijgewerkt op: 2026-10-14
- Andere talen: [fr](https://www.datafirefly.com/documentation/dfsocialconnect/index.md), [en](https://www.datafirefly.com/en/documentation/dfsocialconnect/index.md), [es](https://www.datafirefly.com/es/documentation/dfsocialconnect/index.md), [de](https://www.datafirefly.com/de/documentation/dfsocialconnect/index.md), [it](https://www.datafirefly.com/it/documentation/dfsocialconnect/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfsocialconnect/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfsocialconnect/index.md)
- Index: <https://www.datafirefly.com/nl/documentation/llms.txt>

## Overzicht

DataFirefly Social Connect voegt aan PrestaShop 8 en 9 inloggen en registreren met één klik toe via **Google**, **Apple** en **Facebook**. De knoppen verschijnen op de inlogpagina, op de registratiepagina en, optioneel, in de checkout. De klant beheert zijn gekoppelde accounts op een pagina "Gekoppelde accounts" in zijn klantomgeving.

De module bevat ook een statistiekendashboard (conversie per dienst, apparaten, inlogtijden, omzet), een optionele welkomstbon en een ondertekende webhook voor je CRM.

Deze documentatie hoort bij versie 1.1.0. De module is compatibel met PrestaShop 8.0.0 tot 9.x en PHP 7.4 tot 8.3, met cURL en OpenSSL. Er is geen Composer-afhankelijkheid nodig.

## Installatie

1. Download het archief van de module vanuit je klantaccount op datafirefly.com.
2. Open in de backoffice **Modules > Modulebeheer > Een module uploaden** en sleep de ZIP erin.
3. Klik op **Installeren**. De module maakt 5 tabellen aan (`ps_dfsc_identity`, `ps_dfsc_log`, `ps_dfsc_stats_daily`, `ps_dfsc_button_click`, `ps_dfsc_consent`) en slaat zijn standaardinstellingen op.
4. Klik op **Configureren**. Zolang er geen dienst actief is, opent de module direct het tabblad **Diensten** en blijven de knoppen in de winkel verborgen.

### Update vanaf versie 1.0.0

Upload de nieuwe ZIP in Modulebeheer: de update wordt automatisch uitgevoerd. Je inloggegevens, instellingen, klantkoppelingen en statistieken blijven behouden. De update past de indexen van de koppelingstabel aan, registreert de nieuwe hooks, voegt de nieuwe instellingen toe en verwijdert het verborgen beheertabblad van 1.0.0, dat niet meer nodig is.

Open na de update het tabblad Diensten en vergelijk de getoonde terugkeer-URI's met de URI's die bij Google, Apple en Facebook zijn opgeslagen. Ze worden nu altijd opgebouwd in de standaardtaal van de winkel. In een meertalige winkel waarvan de backoffice in een andere taal stond, kan de URI veranderd zijn.

## Diensten instellen

Elke dienst vraagt om inloggegevens die je in de ontwikkelaarsconsole van die dienst aanmaakt. Het tabblad **Diensten** toont de exacte terugkeer-URI die je in elke console moet plakken: het kleinste verschil geeft een fout `redirect_uri_mismatch`.

Deze URI's worden in de standaardtaal van de winkel opgebouwd en veranderen niet met de taal van de bezoeker: één URI per dienst volstaat. De klant komt daarna terug in zijn eigen taal.

Een dienst verschijnt alleen in de winkel als hij is ingeschakeld _en_ alle inloggegevens zijn ingevuld. De balk bovenaan het tabblad toont per dienst of die **actief**, **onvolledig** of **uit** is.

Geheime velden (Clientgeheim, App-geheim, Apple-privésleutel) worden na het opslaan nooit meer getoond. Laat ze leeg om de huidige waarde te behouden.

### Google

1. Open [de Google Cloud Console, onderdeel Inloggegevens](https://console.cloud.google.com/apis/credentials).
2. Maak een project aan of selecteer er een, kies daarna **Inloggegevens maken > OAuth-client-ID**, type **Webapplicatie**.
3. Plak bij **Geautoriseerde omleidings-URI's** de URI die de module toont (vorm: `https://jouw-winkel.nl/nl/module/dfsocialconnect/callback?provider=google`).
4. Plak de **Client-ID** en het **Clientgeheim** in de module, schakel Google in en sla op.

### Apple

1. Open [Apple Developer, Identifiers](https://developer.apple.com/account/resources/identifiers/list/serviceId) (betaald Apple-ontwikkelaarsaccount vereist).
2. Maak een **Services ID** aan (geen App ID). De identifier ervan, bijvoorbeeld `com.jouwwinkel.signin`, is de _Services ID_ die je in de module invult.
3. Schakel **Sign in with Apple** in voor deze Services ID en geef het domein dat de module toont en de terugkeer-URI (provider=apple) op als _Return URL_.
4. Maak onder **Keys** een sleutel aan met Sign in with Apple ingeschakeld en download het bestand `AuthKey_XXXXXXXXXX.p8`. Apple laat je dit bestand maar één keer downloaden.
5. Vul in de module de **Services ID** in, de **Team ID** (10 tekens, rechtsboven in de Apple-console), de **Key ID** (10 tekens) en de volledige inhoud van het .p8-bestand, inclusief de regels BEGIN en END.
6. Schakel Apple in en sla op. De module controleert de sleutel meteen en toont "Er is een geldige sleutel opgeslagen." of een foutmelding.

De client_secret die Apple vraagt, is een JWT-token dat in ES256 wordt ondertekend met je .p8-sleutel. De module maakt dit token bij elke login aan, met een geldigheid van 5 minuten: je hoeft niets handmatig te vernieuwen.

Klanten die hun e-mailadres verbergen, krijgen een adres `@privaterelay.appleid.com`. Registreer je verzenddomein in de dienst **Private Email Relay** van je Apple Developer-account, zodat je bestelmails bij hen aankomen.

Apple stuurt de klant terug naar de winkel met een POST-request vanaf de eigen site van Apple. Browsers sturen de PrestaShop-cookie daar niet mee. De module herkent dit geval en voert het request opnieuw uit vanuit de winkel, zodat de sessie en de winkelwagen van de klant behouden blijven. Je hoeft hiervoor niets in te stellen.

### Facebook

1. Open [Meta for Developers](https://developers.facebook.com/apps) en maak een app aan.
2. Voeg het product **Facebook Login** toe en vraag de toestemming `email` aan.
3. Plak onder **Facebook Login > Instellingen** de terugkeer-URI die de module toont (provider=facebook) in _Geldige OAuth-omleidings-URI's_.
4. Kopieer de **App-ID** en het **App-geheim** (Instellingen > Basis) naar de module, schakel Facebook in en sla op.

De module gebruikt Facebook Graph API v23 en voegt bij elke aanroep `appsecret_proof` toe: een gestolen toegangstoken is zonder het geheim van je app niet bruikbaar.

## Traject van de klant

### Inloggen en account aanmaken

Wanneer de klant terugkomt van Google, Apple of Facebook, werkt de module in deze volgorde:

1. Is dit sociale account al gekoppeld aan een klant van de winkel, dan wordt de klant ingelogd.
2. Komt het e-mailadres overeen met een bestaande klant _en_ heeft de dienst het geverifieerd _en_ staat automatisch koppelen aan, dan wordt de dienst aan dat account gekoppeld en wordt de klant ingelogd.
3. Komt het e-mailadres overeen met een bestaande klant maar kan het niet worden gekoppeld, dan wordt er geen account aangemaakt. De klant ziet de melding: "Er bestaat al een account met dit e-mailadres. Log in met je wachtwoord en koppel deze dienst daarna via "Gekoppelde accounts" in je account."
4. In alle andere gevallen wordt een account aangemaakt met de doorgegeven voornaam, achternaam en het e-mailadres, in de taal waarin de klant surfte, met een willekeurig versleuteld wachtwoord.

Uitgeschakelde accounts kunnen niet inloggen. In een multishop zonder gedeelde klanten logt een sociaal account nooit een klant van een andere winkel in.

Bij het inloggen roept de module de native hook `actionAuthentication` aan en, voor een nieuw account, `actionCustomerAccountAdd`. Automatische winkelwagenregels worden opnieuw berekend, net als bij het formulier van PrestaShop. Staat de PrestaShop-optie voor de bevestigingsmail aan, dan ontvangt de nieuwe klant de gebruikelijke welkomstmail.

### Terug naar de oorspronkelijke pagina

Na het inloggen komt de klant terug op de pagina waar hij vandaan kwam, bijvoorbeeld de checkout. Is die er niet, dan komt hij op de pagina die je op het tabblad Gedrag hebt gekozen. Alleen adressen van je eigen winkel worden geaccepteerd: een gemanipuleerde link kan de klant niet naar een andere site sturen.

### Pagina "Gekoppelde accounts"

Op de pagina Mijn account verschijnt een tegel "Gekoppelde accounts" (thema's Classic en Hummingbird). Die opent een pagina met elke dienst en de status ervan. Voor een gekoppelde dienst toont de pagina de naam, het e-mailadres, de koppeldatum en de avatar als die is geïmporteerd.

- **Koppelen**: start het inloggen bij de dienst en koppelt die aan het account van de klant.
- **Ontkoppelen**: verwijdert de koppeling na bevestiging. Is het de laatste gekoppelde account, dan vraagt de module de klant om eerst een wachtwoord in te stellen via "Wachtwoord vergeten?", zodat hij toegang tot zijn account houdt.

## Tabblad Gedrag

- **Automatisch koppelen via geverifieerd e-mailadres**: koppelt de dienst aan een bestaand account wanneer de provider hetzelfde e-mailadres heeft bevestigd. Staat de optie uit, dan moet de klant eerst met zijn wachtwoord inloggen en de dienst daarna vanuit zijn account koppelen. Standaard ingeschakeld.
- **Avatar lokaal importeren**: slaat de profielfoto op in `/img/dfsc/avatars/` (alleen HTTPS, maximaal 2 MB, gecontroleerd als JPEG, PNG, GIF of WebP) en toont hem op de pagina Gekoppelde accounts.
- **Nieuwe accounts inschrijven voor de nieuwsbrief**: onder de AVG moet toestemming uitdrukkelijk worden gegeven. Schakel deze optie alleen in als je die toestemming elders verzamelt.
- **Juridische vermelding onder de knoppen**: kies een CMS-pagina (je voorwaarden of je privacybeleid). De zin "Door verder te gaan, ga je akkoord met onze [pagina]" verschijnt onder de knoppen en de acceptatie wordt voor elk aangemaakt account vastgelegd. Kies "Geen" om de vermelding te verbergen.
- **Welkomstbon**: maakt voor elk account dat via een dienst wordt aangemaakt een eenmalige kortingsbon aan, 90 dagen geldig en zichtbaar in de winkelwagen van de klant. Stel het codevoorvoegsel in (letters, cijfers, streepjes, maximaal 40 tekens) en het bedrag incl. btw in de standaardvaluta. De code heeft de vorm `WELCOME-GOOGLE-A1B2C3`. De klant krijgt de code te zien zodra hij is ingelogd.
- **Klantgroepen per dienst**: voegt nieuwe klanten toe aan de gekozen groep, afhankelijk van de gebruikte dienst.
- **Max. pogingen per IP-adres (15 minuten)**: aantal logins dat vanaf hetzelfde IP-adres binnen 15 minuten mag worden gestart. Standaard 20, van 1 tot 500.
- **Pagina na het inloggen**: Mijn account, Startpagina, Checkout, Bestelgeschiedenis of Persoonlijke gegevens. Wordt gebruikt wanneer de klant niet van een specifieke pagina komt.
- **Logs en klikken bewaren (dagen)**: van 30 tot 3.650 dagen, standaard 365. De logs bevatten IP-adressen en worden één keer per dag automatisch opgeschoond. De dagstatistieken van het dashboard blijven bewaard.
- **Uitgaande webhook**: URL en geheim, zie verderop.

## Tabblad Weergave

- **Knopstijl**: rounded (standaard), pill, square, ghost of minimal. Op een groot scherm staan de knoppen naast elkaar en ze lopen door naar een nieuwe regel in plaats van hun tekst af te kappen.
- **Knoptekst**: "Doorgaan met", "Inloggen met" of "Registreren met". De registratiepagina gebruikt altijd "Registreren met".
- **Toon de knoppen ook in de checkout**: stap "Persoonlijke gegevens", voor bezoekers die niet zijn ingelogd. Standaard ingeschakeld.

De knoppen worden altijd getoond op de inlog- en registratiepagina, zodra er minstens één dienst actief is.

## Dashboard

Het eerste tabblad van de configuratie toont de statistieken over 7, 30, 90 of 365 dagen. In een multishop volgt het de winkel of de groep die in de backoffice is geselecteerd.

- **Kerncijfers**: geslaagde logins, klikken op knoppen met de conversieratio, nieuwe klanten, mislukte pogingen.
- **Logins in de tijd**, per dag en per dienst.
- **Verdeling per dienst** en **conversieratio** per dienst: een opvallend lage ratio wijst vaak op een verkeerd ingestelde dienst.
- **Apparaten** en **populairste browsers**.
- **Kaart per weekdag en uur** van de geslaagde logins (servertijd).
- **Gebruiksgraad**: aandeel van de actieve klantaccounts dat aan elke dienst gekoppeld is.
- **Omzet van klanten met sociale login**: geldige bestellingen van de periode, incl. btw, in de valuta van elke bestelling. Elke klant telt één keer, onder de eerst gekoppelde dienst.
- **Recente activiteit**: de laatste 25 gebeurtenissen (aanmaken, logins, koppelingen, ontkoppelingen, mislukte pogingen) met de exacte fout die de provider teruggeeft.

## CRM-webhook

De module kan een JSON-POST naar een URL naar keuze sturen bij de gebeurtenissen `identity.login` (inloggen of account aanmaken), `identity.linked` (koppelen via Gekoppelde accounts) en `identity.unlinked` (ontkoppelen). De aanroep is beperkt tot 3 seconden, zodat de klant niet hoeft te wachten. Mislukt de aanroep, dan wordt de fout in de PrestaShop-logs geschreven.

De body wordt ondertekend met HMAC-SHA256 en het webhook-geheim. Bij de installatie wordt een willekeurig geheim aangemaakt. De handtekening gaat mee in de header `X-Dfsc-Signature` in de vorm `sha256=` en de naam van de gebeurtenis in `X-Dfsc-Event`. Bereken aan de ontvangende kant de HMAC opnieuw over de ruwe body en vergelijk.

```
{
  "event": "identity.login",
  "sent_at": "2026-10-14T11:27:45+02:00",
  "data": {
    "id_customer": 1234,
    "provider": "google",
    "event": "created",
    "email": "marie.dupont@example.com",
    "id_shop": 1
  }
}
```

Het veld `data.event` is `created` (account aangemaakt), `linked` (gekoppeld aan een bestaand account via een geverifieerd e-mailadres) of `login` (login van een klant die al gekoppeld was).

## AVG

- De juridische vermelding onder de knoppen informeert de klant voordat het account wordt aangemaakt. De acceptatie wordt vastgelegd in `ps_dfsc_consent`, samen met de status van de nieuwsbriefinschrijving.
- De logs en klikken, die IP-adressen bevatten, worden opgeschoond na de gekozen termijn.
- De klant kan elke dienst ontkoppelen via de pagina Gekoppelde accounts.
- Met de officiële module **psgdpr** bevat de gegevensexport van de klant zijn gekoppelde accounts, en het verwijderen van zijn gegevens wist zijn koppelingen, toestemmingen en avatars.
- Wanneer een klant in de backoffice wordt verwijderd, worden zijn koppelingen, toestemmingen en avatars verwijderd en worden zijn logregels geanonimiseerd.

## Talen

De module wordt geleverd in het Engels, Frans, Spaans, Duits, Italiaans, Nederlands, Pools en Portugees, zowel in de winkel als in de backoffice. Je past de teksten aan via **Internationaal > Vertalingen > Vertalingen van geïnstalleerde modules**.

## Verwijderen

Bij het verwijderen via Modulebeheer worden de 5 tabellen `ps_dfsc_*`, alle configuratiesleutels `DFSC_*` en de map `/img/dfsc/` met de geïmporteerde avatars verwijderd. Klantaccounts en hun bestellingen blijven intact: alleen de sociale koppelingen worden gewist.

## Problemen oplossen

Begin altijd bij de lijst **Recente activiteit** op het dashboard: die toont de exacte fout die de provider teruggeeft.

**redirect_uri_mismatch (Google) of geblokkeerde URL (Facebook)**: de URI die bij de provider is opgeslagen, komt niet exact overeen met de URI die de module toont. Controleer https, de www, het taalvoorvoegsel en de parameter `?provider=`.

**invalid_client (Apple)**: onjuiste Team ID of Key ID, onvolledige .p8-sleutel, een Services ID verward met een App ID, of een Return URL die afwijkt van die van de module. Meldt de module "De opgeslagen sleutel is onleesbaar: plak hem opnieuw.", plak de sleutel dan opnieuw.

**invalid_grant**: de autorisatiecode is verlopen of al gebruikt, bijvoorbeeld nadat de klant in de browser op Terug heeft geklikt. Start het inloggen gewoon opnieuw.

**"Je inlogsessie is verlopen. Probeer het opnieuw."**: er zijn meer dan 15 minuten verstreken op het scherm van de provider, of de cookie van de winkel werd geblokkeerd. Start het inloggen opnieuw.

**"Er bestaat al een account met dit e-mailadres."**: de provider heeft het e-mailadres niet bevestigd, of automatisch koppelen staat uit. De klant logt in met zijn wachtwoord en koppelt de dienst daarna via Gekoppelde accounts.

**"Te veel pogingen. Wacht een paar minuten."**: de limiet per IP-adres is bereikt. Wacht 15 minuten of verhoog de drempel op het tabblad Gedrag, bijvoorbeeld voor een bedrijf waar alle werkplekken hetzelfde IP-adres delen.

**Een knop verschijnt niet**: controleer in de balk van de configuratie of de dienst op "actief" staat en niet op "onvolledig". Leeg daarna de cache van PrestaShop.

**De welkomstbon wordt niet aangemaakt**: controleer of de optie is ingeschakeld en of het bedrag hoger is dan nul. De bon wordt alleen aangemaakt voor een nieuw account, niet bij het koppelen van een bestaand account.
