From cd9fbce5f9463c53e766ed2633254cba21a29baf Mon Sep 17 00:00:00 2001 From: Carsten Graf Date: Wed, 3 Sep 2025 14:24:41 +0200 Subject: [PATCH] Fixed Reset PW! --- public/index.html | 4 +- public/reset-password.html | 145 +++++++++++++++++++++++-------------- 2 files changed, 92 insertions(+), 57 deletions(-) diff --git a/public/index.html b/public/index.html index 232d663..b99dbc7 100644 --- a/public/index.html +++ b/public/index.html @@ -648,8 +648,8 @@
-

SPEEDRUN ARENA

-

Die ultimative Timer-Rangliste

+

NINJACROSS LEADERBOARD

+

Die ultimative NinjaCross-Rangliste

diff --git a/public/reset-password.html b/public/reset-password.html index 525b15d..200a150 100644 --- a/public/reset-password.html +++ b/public/reset-password.html @@ -311,58 +311,7 @@ const loading = document.getElementById('loading'); const messageContainer = document.getElementById('messageContainer'); - // URL-Parameter extrahieren - const urlParams = new URLSearchParams(window.location.hash.substring(1)); - const accessToken = urlParams.get('access_token'); - const refreshToken = urlParams.get('refresh_token'); - const tokenType = urlParams.get('token_type'); - - // Prüfen ob Reset-Token vorhanden ist - if (!accessToken) { - showMessage('error', 'Ungültiger oder fehlender Reset-Link. Bitte fordere einen neuen Reset-Link an.'); - resetForm.style.display = 'none'; - return; - } - - // Session mit Token setzen - async function setSession() { - try { - const { data, error } = await supabase.auth.setSession({ - access_token: accessToken, - refresh_token: refreshToken - }); - - if (error) { - throw error; - } - - console.log('Session erfolgreich gesetzt:', data.user?.email); - } catch (error) { - console.error('Fehler beim Setzen der Session:', error); - showMessage('error', 'Fehler beim Laden des Reset-Links. Bitte versuche es erneut.'); - resetForm.style.display = 'none'; - } - } - - // Passwort zurücksetzen - async function resetPassword(newPassword) { - try { - const { data, error } = await supabase.auth.updateUser({ - password: newPassword - }); - - if (error) { - throw error; - } - - return { success: true, data }; - } catch (error) { - console.error('Fehler beim Zurücksetzen des Passworts:', error); - return { success: false, error: error.message }; - } - } - - // Nachricht anzeigen + // Nachricht anzeigen (muss vor anderen Funktionen definiert werden) function showMessage(type, message) { messageContainer.innerHTML = `
@@ -371,6 +320,83 @@ `; } + // URL-Parameter extrahieren + console.log('URL Hash:', window.location.hash); + const urlParams = new URLSearchParams(window.location.hash.substring(1)); + const accessToken = urlParams.get('access_token'); + const refreshToken = urlParams.get('refresh_token'); + const tokenType = urlParams.get('token_type'); + + console.log('Access Token gefunden:', !!accessToken); + console.log('Refresh Token gefunden:', !!refreshToken); + + // Prüfen ob Reset-Token vorhanden ist + if (!accessToken) { + showMessage('error', 'Ungültiger oder fehlender Reset-Link. Bitte fordere einen neuen Reset-Link an.'); + resetForm.style.display = 'none'; + } + + // Session mit Token setzen + async function setSession() { + if (!accessToken || !refreshToken) { + showMessage('error', 'Ungültiger Reset-Link. Tokens fehlen.'); + resetForm.style.display = 'none'; + return false; + } + + try { + console.log('Setze Session mit Tokens...'); + const { data, error } = await supabase.auth.setSession({ + access_token: accessToken, + refresh_token: refreshToken + }); + + if (error) { + console.error('Session Error:', error); + throw error; + } + + console.log('Session erfolgreich gesetzt:', data.user?.email); + showMessage('success', `Session aktiv für: ${data.user?.email}`); + return true; + } catch (error) { + console.error('Fehler beim Setzen der Session:', error); + showMessage('error', `Fehler beim Laden des Reset-Links: ${error.message}`); + resetForm.style.display = 'none'; + return false; + } + } + + // Passwort zurücksetzen + async function resetPassword(newPassword) { + try { + console.log('Starte Passwort-Update...'); + + // Erstmal Session prüfen + const { data: session } = await supabase.auth.getSession(); + console.log('Aktuelle Session:', session); + + if (!session.session) { + throw new Error('Keine aktive Session gefunden'); + } + + const { data, error } = await supabase.auth.updateUser({ + password: newPassword + }); + + if (error) { + console.error('Update User Error:', error); + throw error; + } + + console.log('Passwort erfolgreich aktualisiert:', data); + return { success: true, data }; + } catch (error) { + console.error('Fehler beim Zurücksetzen des Passworts:', error); + return { success: false, error: error.message }; + } + } + // Formular-Validierung function validateForm() { const newPassword = newPasswordInput.value; @@ -403,6 +429,12 @@ resetForm.style.display = 'none'; try { + // Warten bis Session gesetzt ist + const sessionSet = await setSession(); + if (!sessionSet) { + throw new Error('Session konnte nicht gesetzt werden'); + } + const result = await resetPassword(newPasswordInput.value); if (result.success) { @@ -417,7 +449,8 @@ resetForm.style.display = 'block'; } } catch (error) { - showMessage('error', '❌ Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es erneut.'); + console.error('Submit Error:', error); + showMessage('error', `❌ Fehler: ${error.message}`); resetForm.style.display = 'block'; } finally { resetBtn.disabled = false; @@ -425,8 +458,10 @@ } }); - // Session beim Laden der Seite setzen - setSession(); + // Session beim Laden der Seite setzen (nur wenn Token vorhanden) + if (accessToken && refreshToken) { + setSession(); + } // Passwort-Sicherheitshinweise newPasswordInput.addEventListener('input', function() {