302-Redirect bei AJAX-Registrierung im Modal (admin-ajax.php) mit Double-Opt-in
-
Hallo zusammen,
ich habe einen reproduzierbaren Konflikt zwischen WooCommerce Germanized und einer AJAX-basierten Registrierung im Modal (Theme: Elessi / NASA).
Sobald Germanized aktiv ist und der Kunde sich über das Registrierungsformular im Modal anmeldet, passiert Folgendes:
- Das Formular im Modal schickt einen AJAX-Request an:
POST /wp-admin/admin-ajax.php - Statt einer AJAX-kompatiblen Antwort kommt:
HTTP 302 Redirect
Location: /mein-konto/?show_checkout_notice=yes&account=activate - Anschließend wird per GET die Mein-Konto-Seite geladen (HTML), auf der u.a. folgende Notices erscheinen:
- „Bitte aktiviere dein Kundenkonto indem du auf den Link in der E-Mail klickst.“
- „Keine Aktivierungs-E-Mail erhalten? Erneut zusenden“ mit Link:
?action=wc-gzd-resend-activation&_wpnonce=…
Die Registrierung selbst funktioniert, der Account wird angelegt, die Aktivierungs-E-Mail wird versendet und die Hinweisbox auf der Mein-Konto-Seite ist korrekt. Das Problem ist ausschließlich die Art der Antwort im AJAX-Kontext:
Das Modal erwartet eine AJAX-kompatible Response für den Action-Handler
nasa_process_register, der im Erfolgsfall u.a. folgende Schlüssel zurückliefert:- error: “0” (Erfolg)
- mess: ‘Herzlichen Glückwunsch!Jetzt haben Sie sich erfolgreich registriert. Sie können diesen Tab jetzt schließen oder Ihr Dashboard besuchen.’
- svg_check: ”
- redirect: ‘https://www.website.de/’
Diese Struktur wertet das Theme aus, zeigt die Erfolgsnachricht im Modal an und führt anschließend ggf. einen Redirect durch. Wenn Germanized aktiv ist, erhält das Modal stattdessen einen 302-Redirect samt kompletter HTML-Seite und kann den Vorgang daher nicht sauber als „erfolgreich“ erkennen – der Spinner im Modal bleibt hängen und es wirkt so, als würde nichts passieren, obwohl im Hintergrund alles korrekt angelegt wurde.
Wichtige Beobachtungen:
- Deaktiviere ich Germanized, funktioniert der AJAX-Registrierungsflow im Modal wie erwartet: Der Handler
nasa_process_registerliefert die oben genannte Struktur (error, mess, svg_check, redirect), das Modal zeigt den Erfolg an, schließt sich bzw. leitet weiter und der User bleibt im gewohnten Flow. - Aktiviere ich testweise das Parent Theme (Child Theme deaktiviert), bleibt das Problem bestehen.
- Der Unterschied ist eindeutig Germanized (insbesondere Double-Opt-in / Account-Aktivierung), nicht das Theme.
Mein Verständnis:
Germanized erweitert den Registrierungs- / Account-Aktivierungsflow (Double-Opt-in) und führt unabhängig vom Kontext einen Redirect auf die Mein-Konto-Seite mit account=activate aus. Für normale Seitenaufrufe ist das sinnvoll, im AJAX-Kontext (admin-ajax.php) führt es aber zu Problemen, weil dort eine strukturierte AJAX-Antwort erwartet wird.Verbesserungsvorschlag (Minimalanforderung):
Im AJAX-Kontext (
wp_doing_ajax() === true) wäre es hilfreich, wenn Germanized:- keinen Redirect auf „Mein Konto / account=activate“ ausführt und
- keine eigene Ausgabe/Response erzeugt, die das normale Ergebnis des Handlers
nasa_process_registerersetzt.
Stattdessen sollte im AJAX-Kontext der bestehende Handler (hier:
nasa_process_register) seine eigene Antwort wie vorgesehen zurückgeben dürfen (inkl. error, mess, svg_check, redirect), damit das Theme den Erfolg korrekt erkennen, das Modal aktualisieren und ggf. schließen bzw. weiterleiten kann.Für klassische (nicht-AJAX) Registrierungsvorgänge kann das bestehende Redirect-/Notice-Verhalten unverändert bleiben. So bliebe die Double-Opt-in-/Aktivierungslogik voll erhalten, wäre aber zusätzlich mit gängigen AJAX-/Modal-Registrierungen kompatibel, wie sie viele WooCommerce-Themes verwenden.
Mir ist wichtig zu betonen: Ich möchte Germanized nicht „abschalten“, sondern die bestehende Anpassung an WooCommerce so verbessern, dass der Double-Opt-in-Flow auch im AJAX-Kontext sauber funktioniert und die vorhandene Theme-Logik (
nasa_process_registermit error/mess/svg_check/redirect) nicht gestört wird.Falls ihr dazu noch technische Details (z.B. konkrete Request-/Response-Dumps oder Infos zur verwendeten Modal-Implementierung) benötigt, liefere ich die gerne nach.
Viele Grüße
- Das Formular im Modal schickt einen AJAX-Request an:
You must be logged in to reply to this topic.