Add detailed logging for password reset process in AuthService; enhance user feedback with console messages for email sending, token generation, and error handling.

This commit is contained in:
Torsten Schulz (local)
2025-10-19 13:09:34 +02:00
parent 70d135babf
commit e0a4726adb

View File

@@ -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;