Jeopardy – Login-Brücke
Das Modul meldet Nutzer mit ihrem WordPress-Konto bei der separaten Jeopardy-App auf jeopardy.weinify.de an. Statt eines eigenen Logins in der App stellt WordPress ein kurzlebiges, signiertes JWT aus, das die App einmal prüft und gegen ein eigenes Session-Cookie tauscht. Login, Registrierung und Logout laufen über die normalen Seiten der Benutzerverwaltung.
Allgemein
Anmelden aus der App heraus
Das Konto-Menü oben rechts in der Jeopardy-App verlinkt auf diese Site mit dem Parameter weinhold_jeopardy_auth (login, register oder logout) und einem Rücksprungpfad. Wer noch nicht eingeloggt ist, landet auf der Login- bzw. Registrierungsseite der Benutzerverwaltung und kommt danach automatisch zurück. Eingeloggte Nutzer werden sofort mit einem frisch signierten Token zur App weitergeleitet und sind dort angemeldet.
Was die Anmeldung in der App erlaubt
Jeder angemeldete Nutzer darf in der App eigene Boards anlegen, sie öffentlich schalten, als Vorlage einreichen und seine eigenen sowie alle öffentlichen Boards hosten. Mitspielen per Handy und die Board-Ansicht am Beamer gehen weiterhin ohne Konto. Administratoren dieser Site (Recht manage_options) bekommen zusätzlich ein Admin-Kennzeichen im Token und dürfen in der App alle Boards und Vorlagen sehen und pflegen.
Abmelden
Logout in der App löscht das Session-Cookie der App und meldet anschließend auch bei WordPress ab (über die Logout-URL mit Nonce), danach geht es zurück zur App.
Gegenstück in der App (Repo VPS-Addons, Ordner Jeopardy): backend/src/routes/auth.ts (Token prüfen, Session-Cookie jeopardy_session) und backend/src/shared/access.ts (Rechte für Boards).Dateien
modules/jeopardy_auth.php – einzige Datei des Moduls: Einstieg über den Query-Parameter, Rücksprung-Prüfung, JWT-Signierung, Erweiterung der erlaubten Redirect-Hosts und Admin-Statusseite.
Für Entwickler
Kein eigener Datenbank-State
Das Modul hat weder Tabelle noch Optionen noch Capabilities und deshalb auch kein maybe_install() und kein cleanup(). Es signiert bei jedem Aufruf nur ein Token aus vorhandenen Nutzerdaten. Ein eigenes Recht zum Hosten gibt es bewusst nicht: jeder eingeloggte Nutzer darf sich anmelden, die feineren Regeln (Ersteller, öffentlich, Admin) entscheidet die App.
Ablauf und Einstieg
weinhold_jeopardy_auth_handle_request() hängt mit Priorität 1 an template_redirect und reagiert nur, wenn weinhold_jeopardy_auth gesetzt ist. Nicht eingeloggte Nutzer werden zur Auth-Seite der Benutzerverwaltung geschickt (weinhold_user_management_get_auth_page_url), mit redirect_to auf genau diese Einstiegs-URL, damit sie danach eingeloggt hier landen. Der Rücksprungpfad wird von weinhold_jeopardy_auth_sanitize_return() geprüft: nur Pfade mit genau einem führenden Schrägstrich, sonst die Startseite der App.
Parameter Beschreibung weinhold_jeopardy_auth login, register oder logout return Pfad in der App, auf den nach der Anmeldung zurückgesprungen wird (Standard /) Token
weinhold_jeopardy_auth_sign_token() baut ein HS256-JWT von Hand (Base64url und hash_hmac(), keine Composer-Bibliothek). Das Token läuft nach 120 Sekunden ab und wird im URL-Fragment an {App}/auth/callback übergeben, damit es nicht in Server-Logs landet. Die App tauscht es sofort gegen ihr eigenes httpOnly-Session-Cookie (30 Tage).
Claim Inhalt sub WordPress-Nutzer-ID name Anzeigename avatar URL des Profilbilds profile_url Profilseite der Benutzerverwaltung admin true, wenn der Nutzer auf dieser Site manage_options hat iat Ausstellungszeitpunkt exp Ablauf (Ausstellung plus 120 Sekunden) Konfiguration
Konstante Beschreibung JEOPARDY_JWT_SECRET Pflicht, in wp-config.php. Muss exakt mit JEOPARDY_JWT_SECRET in der .env der App übereinstimmen JEOPARDY_APP_URL Optional, Standard https://jeopardy.weinify.de (zusätzlich per Filter weinhold_jeopardy_auth_app_url änderbar)
Die App liegt nicht im Multisite-Netzwerk. Damit der Rücksprung nach dem Logout über wp_safe_redirect() funktioniert, ergänzt das Modul den Host der App-URL über den Filter allowed_redirect_hosts. Die Hilfsfunktion weinhold_user_management_add_redirect_to_url() wird absichtlich nicht verwendet: sie dekodiert das Ziel mehrfach und hängt es unkodiert an, wodurch der return-Parameter verloren ginge. Stattdessen wird redirect_to selbst mit rawurlencode() angehängt. Rechte-Änderungen (z. B. jemand wird Administrator) greifen in der App erst nach einer neuen Anmeldung, weil das Admin-Kennzeichen im Session-Cookie der App gespeichert ist.Besonderheiten
Vorbild ist das Modul PPNP Game – Login-Brücke. Anders als dort gibt es keinen Button-Shortcode und keinen AJAX-Endpunkt: die App verlinkt direkt auf die Einstiegs-URL, und der Rücksprung zur App ist ein normaler Redirect.
Versionshistorie
Version Datum Änderung 1.0.0 05.10.2026 Erste Veröffentlichung: Login, Registrierung und Logout für die Jeopardy-App per kurzlebigem JWT. 1.1.0 05.10.2026 Token trägt das Admin-Kennzeichen (manage_options), Grundlage für Board-Besitz, öffentliche Boards und Vorlagen in der App.