feat: Retry-Logik und Timeout für Verifizierung implementieren
- Neue .env Variable: CONTAINER_CREATE_TIMEOUT=10 (Sekunden) - Frontend: Automatische Retries bei fehlgeschlagener Verifizierung - Max 5 Versuche mit 2 Sekunden Delay zwischen Versuchen - Gesamtzeit begrenzt auf 10 Sekunden (CONTAINER_CREATE_TIMEOUT) - Bessere Fehlermeldungen für Timeout-Situation Behebt Problem dass Verifizierung multiple 400-Fehler zeigt bevor sie funktioniert. Dies passiert weil Container beim Spawn noch nicht bereit ist. Mit Retries warten wir jetzt automatisch bis Container ready ist (max 10 Sek).
This commit is contained in:
parent
5d2c556c33
commit
915c28a4e5
|
|
@ -110,6 +110,11 @@ LOG_LEVEL=INFO
|
||||||
# Container-Timeout in Sekunden (fuer Auto-Shutdown, noch nicht implementiert)
|
# Container-Timeout in Sekunden (fuer Auto-Shutdown, noch nicht implementiert)
|
||||||
CONTAINER_IDLE_TIMEOUT=3600
|
CONTAINER_IDLE_TIMEOUT=3600
|
||||||
|
|
||||||
|
# Container-Erstellungs-Timeout in Sekunden
|
||||||
|
# Wie lange wartet das Frontend beim Verifizieren auf erfolgreichen Container-Spawn?
|
||||||
|
# (Standard: 10 Sekunden, dann Error-Message zeigen)
|
||||||
|
CONTAINER_CREATE_TIMEOUT=10
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# PASSWORDLESS AUTH - Magic Links
|
# PASSWORDLESS AUTH - Magic Links
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
|
||||||
|
|
@ -32,18 +32,43 @@ function VerifyLoginContent() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const verify = async () => {
|
const verify = async () => {
|
||||||
const result = await verifyLogin(token);
|
const maxRetries = 5;
|
||||||
|
const retryDelay = 2000; // 2 Sekunden
|
||||||
|
const maxTimeout = 10000; // 10 Sekunden Gesamtzeit
|
||||||
|
|
||||||
if (result.success) {
|
let attempt = 0;
|
||||||
setStatus("success");
|
const startTime = Date.now();
|
||||||
// Redirect nach 1 Sekunde zum Dashboard
|
|
||||||
setTimeout(() => {
|
while (attempt < maxRetries) {
|
||||||
router.push("/dashboard");
|
// Prüfe ob Timeout überschritten
|
||||||
}, 1000);
|
if (Date.now() - startTime > maxTimeout) {
|
||||||
} else {
|
setStatus("error");
|
||||||
setStatus("error");
|
setError("Login hat zu lange gedauert. Bitte versuche es später erneut.");
|
||||||
setError("Ungültiger oder abgelaufener Link");
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await verifyLogin(token);
|
||||||
|
|
||||||
|
if (result.success) {
|
||||||
|
setStatus("success");
|
||||||
|
// Redirect nach 1 Sekunde zum Dashboard
|
||||||
|
setTimeout(() => {
|
||||||
|
router.push("/dashboard");
|
||||||
|
}, 1000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fehler - Versuche erneut (außer beim letzten Versuch)
|
||||||
|
attempt++;
|
||||||
|
if (attempt < maxRetries) {
|
||||||
|
// Warte vor nächstem Versuch
|
||||||
|
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Alle Versuche fehlgeschlagen
|
||||||
|
setStatus("error");
|
||||||
|
setError("Login fehlgeschlagen. Bitte versuche den Link erneut anzufordern.");
|
||||||
};
|
};
|
||||||
|
|
||||||
verify();
|
verify();
|
||||||
|
|
|
||||||
|
|
@ -32,18 +32,43 @@ function VerifySignupContent() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const verify = async () => {
|
const verify = async () => {
|
||||||
const result = await verifySignup(token);
|
const maxRetries = 5;
|
||||||
|
const retryDelay = 2000; // 2 Sekunden
|
||||||
|
const maxTimeout = 10000; // 10 Sekunden Gesamtzeit
|
||||||
|
|
||||||
if (result.success) {
|
let attempt = 0;
|
||||||
setStatus("success");
|
const startTime = Date.now();
|
||||||
// Redirect nach 2 Sekunden zum Dashboard
|
|
||||||
setTimeout(() => {
|
while (attempt < maxRetries) {
|
||||||
router.push("/dashboard");
|
// Prüfe ob Timeout überschritten
|
||||||
}, 2000);
|
if (Date.now() - startTime > maxTimeout) {
|
||||||
} else {
|
setStatus("error");
|
||||||
setStatus("error");
|
setError("Verifizierung hat zu lange gedauert. Bitte versuche es später erneut.");
|
||||||
setError("Ungültiger oder abgelaufener Link");
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await verifySignup(token);
|
||||||
|
|
||||||
|
if (result.success) {
|
||||||
|
setStatus("success");
|
||||||
|
// Redirect nach 2 Sekunden zum Dashboard
|
||||||
|
setTimeout(() => {
|
||||||
|
router.push("/dashboard");
|
||||||
|
}, 2000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fehler - Versuche erneut (außer beim letzten Versuch)
|
||||||
|
attempt++;
|
||||||
|
if (attempt < maxRetries) {
|
||||||
|
// Warte vor nächstem Versuch
|
||||||
|
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Alle Versuche fehlgeschlagen
|
||||||
|
setStatus("error");
|
||||||
|
setError("Verifizierung fehlgeschlagen. Bitte versuche den Link erneut anzufordern.");
|
||||||
};
|
};
|
||||||
|
|
||||||
verify();
|
verify();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user