Files
vans-diy-bastelbedarf/d1/migration-0004-kundenkonten.sql
T
qciganoandClaude Sonnet 5 bf0d169015 Echtes Google-/PayPal-Login: OAuth 2.0 + PKCE, eigene Kundendatenbank, DSGVO-Selbstbedienung
Kundenkonten sind jetzt genauso echt wie die PayPal-Zahlung: server-geprüftes OAuth 2.0 mit
PKCE für Google und "Log in with PayPal" (functions/_shared/oauth.js, oauth-handlers.js),
neue D1-Tabelle "customers" (bewusst ohne Passwort-Feld), eigene von der Zugangscode-Schranke
getrennte Sitzungs-Logik (customer-auth.js). Echte DSGVO-Rechte direkt im Kontobereich:
Daten herunterladen (Art. 15/20) und Konto unwiderruflich löschen (Art. 17), Bestellungen
bleiben aus gesetzlichen Gründen erhalten. Datenschutzerklärung entsprechend ergänzt.

Ohne echte Google-/PayPal-Zugangsdaten zeigt der Login-Button ehrlich einen
"noch nicht eingerichtet"-Hinweis statt eine Anmeldung vorzutäuschen.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-04 01:45:55 +02:00

24 lines
1.1 KiB
SQL

-- Migration 0004: echte Kundenkonten für Google-/PayPal-Login.
--
-- Bewusst OAuth-only (kein eigenes Passwort-Feld): dadurch entfällt jede Passwort-Sicherheits-
-- verantwortung für uns komplett (kein Hashing, kein Passwort-Leck-Risiko) — Google/PayPal
-- übernehmen die eigentliche Identitätsprüfung, wir speichern nur, WER (per Provider-ID)
-- eingeloggt ist. Siehe functions/_shared/customer-auth.js + functions/api/auth/*.
CREATE TABLE IF NOT EXISTS customers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
last_login_at TEXT NOT NULL,
-- "google" oder "paypal" — jeweils per OpenID Connect, siehe functions/_shared/oauth.js.
provider TEXT NOT NULL CHECK (provider IN ('google', 'paypal')),
-- Die eindeutige, unveränderliche Nutzer-ID VOM PROVIDER (z.B. Googles "sub"-Feld) — NICHT die
-- E-Mail-Adresse, weil E-Mail-Adressen sich ändern können, die Provider-ID aber nicht.
provider_user_id TEXT NOT NULL,
email TEXT NOT NULL,
name TEXT,
UNIQUE (provider, provider_user_id)
);
CREATE INDEX IF NOT EXISTS idx_customers_email ON customers(email);