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_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
|
||||
# ============================================================
|
||||
|
|
|
|||
|
|
@ -32,6 +32,21 @@ function VerifyLoginContent() {
|
|||
}
|
||||
|
||||
const verify = async () => {
|
||||
const maxRetries = 5;
|
||||
const retryDelay = 2000; // 2 Sekunden
|
||||
const maxTimeout = 10000; // 10 Sekunden Gesamtzeit
|
||||
|
||||
let attempt = 0;
|
||||
const startTime = Date.now();
|
||||
|
||||
while (attempt < maxRetries) {
|
||||
// Prüfe ob Timeout überschritten
|
||||
if (Date.now() - startTime > maxTimeout) {
|
||||
setStatus("error");
|
||||
setError("Login hat zu lange gedauert. Bitte versuche es später erneut.");
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await verifyLogin(token);
|
||||
|
||||
if (result.success) {
|
||||
|
|
@ -40,10 +55,20 @@ function VerifyLoginContent() {
|
|||
setTimeout(() => {
|
||||
router.push("/dashboard");
|
||||
}, 1000);
|
||||
} else {
|
||||
setStatus("error");
|
||||
setError("Ungültiger oder abgelaufener Link");
|
||||
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();
|
||||
|
|
|
|||
|
|
@ -32,6 +32,21 @@ function VerifySignupContent() {
|
|||
}
|
||||
|
||||
const verify = async () => {
|
||||
const maxRetries = 5;
|
||||
const retryDelay = 2000; // 2 Sekunden
|
||||
const maxTimeout = 10000; // 10 Sekunden Gesamtzeit
|
||||
|
||||
let attempt = 0;
|
||||
const startTime = Date.now();
|
||||
|
||||
while (attempt < maxRetries) {
|
||||
// Prüfe ob Timeout überschritten
|
||||
if (Date.now() - startTime > maxTimeout) {
|
||||
setStatus("error");
|
||||
setError("Verifizierung hat zu lange gedauert. Bitte versuche es später erneut.");
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await verifySignup(token);
|
||||
|
||||
if (result.success) {
|
||||
|
|
@ -40,10 +55,20 @@ function VerifySignupContent() {
|
|||
setTimeout(() => {
|
||||
router.push("/dashboard");
|
||||
}, 2000);
|
||||
} else {
|
||||
setStatus("error");
|
||||
setError("Ungültiger oder abgelaufener Link");
|
||||
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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user