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:
@@ -238,18 +238,26 @@ class AuthService {
|
|||||||
async requestPasswordReset(email) {
|
async requestPasswordReset(email) {
|
||||||
const { AuthInfo } = database.getModels();
|
const { AuthInfo } = database.getModels();
|
||||||
|
|
||||||
|
console.log('🔐 Passwort-Reset angefordert für E-Mail:', email);
|
||||||
|
|
||||||
const authInfo = await AuthInfo.findOne({ where: { email } });
|
const authInfo = await AuthInfo.findOne({ where: { email } });
|
||||||
|
|
||||||
if (!authInfo) {
|
if (!authInfo) {
|
||||||
// Aus Sicherheitsgründen keine Fehlermeldung, dass E-Mail nicht existiert
|
// 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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('✅ Benutzer gefunden - User ID:', authInfo.user_id);
|
||||||
|
|
||||||
// Reset-Token generieren
|
// Reset-Token generieren
|
||||||
const resetToken = crypto.randomBytes(32).toString('hex');
|
const resetToken = crypto.randomBytes(32).toString('hex');
|
||||||
const tokenExpires = new Date();
|
const tokenExpires = new Date();
|
||||||
tokenExpires.setHours(tokenExpires.getHours() + 1); // 1 Stunde gültig
|
tokenExpires.setHours(tokenExpires.getHours() + 1); // 1 Stunde gültig
|
||||||
|
|
||||||
|
console.log('🔑 Reset-Token generiert, gültig bis:', tokenExpires.toLocaleString('de-DE'));
|
||||||
|
|
||||||
// Token speichern
|
// Token speichern
|
||||||
await authInfo.update({
|
await authInfo.update({
|
||||||
email_token: resetToken,
|
email_token: resetToken,
|
||||||
@@ -257,11 +265,17 @@ class AuthService {
|
|||||||
email_token_role: 1 // 1 = Password Reset
|
email_token_role: 1 // 1 = Password Reset
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log('💾 Reset-Token in Datenbank gespeichert');
|
||||||
|
|
||||||
// E-Mail versenden (falls konfiguriert)
|
// E-Mail versenden (falls konfiguriert)
|
||||||
if (this.emailTransporter) {
|
if (this.emailTransporter) {
|
||||||
|
console.log('📧 E-Mail-Transporter verfügbar - bereite E-Mail vor...');
|
||||||
|
|
||||||
const frontendUrl = process.env.FRONTEND_URL || 'http://localhost:5010';
|
const frontendUrl = process.env.FRONTEND_URL || 'http://localhost:5010';
|
||||||
const resetUrl = `${frontendUrl}/password-reset?token=${resetToken}`;
|
const resetUrl = `${frontendUrl}/password-reset?token=${resetToken}`;
|
||||||
|
|
||||||
|
console.log('🔗 Reset-URL:', resetUrl);
|
||||||
|
|
||||||
const mailOptions = {
|
const mailOptions = {
|
||||||
from: `"${process.env.EMAIL_FROM_NAME || 'TimeClock'}" <${process.env.EMAIL_FROM}>`,
|
from: `"${process.env.EMAIL_FROM_NAME || 'TimeClock'}" <${process.env.EMAIL_FROM}>`,
|
||||||
to: email,
|
to: email,
|
||||||
@@ -311,15 +325,33 @@ ${frontendUrl}
|
|||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.emailTransporter.sendMail(mailOptions);
|
console.log('📤 Sende E-Mail an:', email);
|
||||||
console.log('✅ Passwort-Reset E-Mail gesendet 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) {
|
} 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
|
// Werfe keinen Fehler - Token wurde gespeichert, User kann es anders nutzen
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.warn('⚠️ E-Mail-Transporter nicht konfiguriert - Reset-Token erstellt aber keine E-Mail versendet');
|
console.warn('⚠️ E-Mail-Transporter NICHT konfiguriert!');
|
||||||
console.log('Reset-Token:', resetToken);
|
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;
|
return resetToken;
|
||||||
|
|||||||
Reference in New Issue
Block a user