Update
This commit is contained in:
202
public/js/reset-password.js
Normal file
202
public/js/reset-password.js
Normal file
@@ -0,0 +1,202 @@
|
||||
// Supabase Konfiguration
|
||||
const supabaseUrl = 'https://lfxlplnypzvjrhftaoog.supabase.co';
|
||||
const supabaseKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImxmeGxwbG55cHp2anJoZnRhb29nIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDkyMTQ3NzIsImV4cCI6MjA2NDc5MDc3Mn0.XR4preBqWAQ1rT4PFbpkmRdz57BTwIusBI89fIxDHM8';
|
||||
|
||||
const supabase = window.supabase.createClient(supabaseUrl, supabaseKey);
|
||||
|
||||
// DOM Elemente
|
||||
const resetForm = document.getElementById('resetForm');
|
||||
const newPasswordInput = document.getElementById('newPassword');
|
||||
const confirmPasswordInput = document.getElementById('confirmPassword');
|
||||
const resetBtn = document.getElementById('resetBtn');
|
||||
const loading = document.getElementById('loading');
|
||||
const messageContainer = document.getElementById('messageContainer');
|
||||
|
||||
// Nachricht anzeigen (muss vor anderen Funktionen definiert werden)
|
||||
function showMessage(type, message) {
|
||||
messageContainer.innerHTML = `
|
||||
<div class="message ${type}">
|
||||
${message}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
// 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;
|
||||
const confirmPassword = confirmPasswordInput.value;
|
||||
|
||||
if (newPassword.length < 8) {
|
||||
showMessage('error', 'Das Passwort muss mindestens 8 Zeichen lang sein.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (newPassword !== confirmPassword) {
|
||||
showMessage('error', 'Die Passwörter stimmen nicht überein.');
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Formular-Submit Handler
|
||||
resetForm.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
if (!validateForm()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// UI-Status ändern
|
||||
resetBtn.disabled = true;
|
||||
loading.style.display = 'block';
|
||||
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) {
|
||||
showMessage('success', '✅ Passwort erfolgreich zurückgesetzt! Du wirst zur Hauptseite weitergeleitet...');
|
||||
|
||||
// Nach 3 Sekunden zur Hauptseite weiterleiten
|
||||
setTimeout(() => {
|
||||
window.location.href = '/';
|
||||
}, 3000);
|
||||
} else {
|
||||
showMessage('error', `❌ Fehler beim Zurücksetzen: ${result.error}`);
|
||||
resetForm.style.display = 'block';
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Submit Error:', error);
|
||||
showMessage('error', `❌ Fehler: ${error.message}`);
|
||||
resetForm.style.display = 'block';
|
||||
} finally {
|
||||
resetBtn.disabled = false;
|
||||
loading.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
// Session beim Laden der Seite setzen (nur wenn Token vorhanden)
|
||||
if (accessToken && refreshToken) {
|
||||
setSession();
|
||||
}
|
||||
|
||||
// Add cookie settings button functionality
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const cookieSettingsBtn = document.getElementById('cookie-settings-footer');
|
||||
if (cookieSettingsBtn) {
|
||||
cookieSettingsBtn.addEventListener('click', function() {
|
||||
if (window.cookieConsent) {
|
||||
window.cookieConsent.resetConsent();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Passwort-Sicherheitshinweise
|
||||
newPasswordInput.addEventListener('input', function() {
|
||||
const password = this.value;
|
||||
const hasLength = password.length >= 8;
|
||||
const hasUpper = /[A-Z]/.test(password);
|
||||
const hasLower = /[a-z]/.test(password);
|
||||
const hasNumber = /\d/.test(password);
|
||||
const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(password);
|
||||
|
||||
if (password.length > 0) {
|
||||
let hints = [];
|
||||
if (!hasLength) hints.push('Mindestens 8 Zeichen');
|
||||
if (!hasUpper) hints.push('Großbuchstaben');
|
||||
if (!hasLower) hints.push('Kleinbuchstaben');
|
||||
if (!hasNumber) hints.push('Zahlen');
|
||||
if (!hasSpecial) hints.push('Sonderzeichen');
|
||||
|
||||
if (hints.length > 0) {
|
||||
showMessage('info', `💡 Tipp: Verwende auch ${hints.join(', ')} für ein sicheres Passwort.`);
|
||||
} else {
|
||||
showMessage('success', '✅ Starkes Passwort!');
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user