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]>
30 lines
1.6 KiB
JavaScript
30 lines
1.6 KiB
JavaScript
/* =====================================================================
|
|
POST /api/account/delete — löscht das echte Kundenkonto unwiderruflich (DSGVO Art. 17,
|
|
"Recht auf Löschung"). Bewusst als echtes Selbstbedienungs-Werkzeug gebaut, nicht nur als
|
|
"schreib uns eine E-Mail"-Hinweis — genau das, was rechtlich am saubersten ist und was
|
|
VanVan vor Anfragen/Beschwerden schützt, die sonst manuell bearbeitet werden müssten.
|
|
|
|
Löscht NUR den customers-Datensatz (Login-Identität) — bereits aufgegebene Bestellungen
|
|
(orders-Tabelle) bleiben bestehen, weil dafür eine gesetzliche Aufbewahrungspflicht gilt
|
|
(handels-/steuerrechtliche Aufbewahrungsfristen, § 257 HGB / § 147 AO) — das Konto ist davon
|
|
rechtlich unabhängig. ===================================================================== */
|
|
|
|
import { json } from "../../_shared/http.js";
|
|
import { getCustomer, clearCustomerCookieHeader } from "../../_shared/customer-auth.js";
|
|
|
|
export async function onRequestPost(context) {
|
|
const { request, env } = context;
|
|
const customer = await getCustomer(request, env);
|
|
if (!customer) return json(401, { ok: false, error: "Nicht angemeldet." });
|
|
|
|
try {
|
|
await env.DB.prepare(`DELETE FROM customers WHERE id = ?`).bind(customer.id).run();
|
|
} catch {
|
|
return json(500, { ok: false, error: "Konto konnte nicht gelöscht werden. Bitte versuche es erneut." });
|
|
}
|
|
|
|
const headers = new Headers({ "Content-Type": "application/json" });
|
|
headers.append("Set-Cookie", clearCustomerCookieHeader());
|
|
return new Response(JSON.stringify({ ok: true }), { status: 200, headers });
|
|
}
|