From e0a4726adb810579f488e1f28e6bc2e9671d90d7 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Sun, 19 Oct 2025 13:09:34 +0200 Subject: [PATCH] Add detailed logging for password reset process in AuthService; enhance user feedback with console messages for email sending, token generation, and error handling. --- backend/src/services/AuthService.js | 42 +++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/backend/src/services/AuthService.js b/backend/src/services/AuthService.js index 828ddf8..3052426 100644 --- a/backend/src/services/AuthService.js +++ b/backend/src/services/AuthService.js @@ -238,18 +238,26 @@ class AuthService { async requestPasswordReset(email) { const { AuthInfo } = database.getModels(); + console.log('🔐 Passwort-Reset angefordert für E-Mail:', email); + const authInfo = await AuthInfo.findOne({ where: { email } }); if (!authInfo) { // Aus Sicherheitsgründen keine Fehlermeldung, dass E-Mail nicht existiert + console.log('⚠️ Kein Benutzer mit E-Mail gefunden:', email); + console.log(' (Aus Sicherheitsgründen wird trotzdem 200 OK zurückgegeben)'); return null; } + console.log('✅ Benutzer gefunden - User ID:', authInfo.user_id); + // Reset-Token generieren const resetToken = crypto.randomBytes(32).toString('hex'); const tokenExpires = new Date(); tokenExpires.setHours(tokenExpires.getHours() + 1); // 1 Stunde gültig + console.log('🔑 Reset-Token generiert, gültig bis:', tokenExpires.toLocaleString('de-DE')); + // Token speichern await authInfo.update({ email_token: resetToken, @@ -257,11 +265,17 @@ class AuthService { email_token_role: 1 // 1 = Password Reset }); + console.log('💾 Reset-Token in Datenbank gespeichert'); + // E-Mail versenden (falls konfiguriert) if (this.emailTransporter) { + console.log('📧 E-Mail-Transporter verfügbar - bereite E-Mail vor...'); + const frontendUrl = process.env.FRONTEND_URL || 'http://localhost:5010'; const resetUrl = `${frontendUrl}/password-reset?token=${resetToken}`; + console.log('🔗 Reset-URL:', resetUrl); + const mailOptions = { from: `"${process.env.EMAIL_FROM_NAME || 'TimeClock'}" <${process.env.EMAIL_FROM}>`, to: email, @@ -311,15 +325,33 @@ ${frontendUrl} }; try { - await this.emailTransporter.sendMail(mailOptions); - console.log('✅ Passwort-Reset E-Mail gesendet an:', email); + console.log('📤 Sende E-Mail an:', email); + console.log(' Von:', mailOptions.from); + console.log(' SMTP-Server:', process.env.EMAIL_HOST + ':' + process.env.EMAIL_PORT); + + const info = await this.emailTransporter.sendMail(mailOptions); + + console.log('✅ Passwort-Reset E-Mail erfolgreich gesendet!'); + console.log(' Empfänger:', email); + console.log(' Message-ID:', info.messageId); + console.log(' Response:', info.response); } catch (error) { - console.error('❌ Fehler beim E-Mail-Versand:', error.message); + console.error('❌ Fehler beim E-Mail-Versand!'); + console.error(' Error:', error.message); + console.error(' Code:', error.code); + if (error.code === 'EAUTH') { + console.error(' 💡 SMTP-Authentifizierung fehlgeschlagen - prüfe EMAIL_USER/PASSWORD in .env'); + } else if (error.code === 'ECONNECTION' || error.code === 'ETIMEDOUT') { + console.error(' 💡 Verbindung zum SMTP-Server fehlgeschlagen - prüfe EMAIL_HOST/PORT/Firewall'); + } // Werfe keinen Fehler - Token wurde gespeichert, User kann es anders nutzen } } else { - console.warn('⚠️ E-Mail-Transporter nicht konfiguriert - Reset-Token erstellt aber keine E-Mail versendet'); - console.log('Reset-Token:', resetToken); + console.warn('⚠️ E-Mail-Transporter NICHT konfiguriert!'); + console.warn(' Reset-Token wurde erstellt, aber KEINE E-Mail versendet'); + console.warn(' Prüfe EMAIL_HOST, EMAIL_USER, EMAIL_PASSWORD in .env'); + console.log('📋 Reset-Token (manuell verwenden):', resetToken); + console.log(' URL: ' + (process.env.FRONTEND_URL || 'http://localhost:5010') + '/password-reset?token=' + resetToken); } return resetToken;