feat(auth): KTO-01 Passwort zurücksetzen (01c) (4/4) #36
No reviewers
Labels
No labels
epic/katalog
epic/konto
epic/partien
epic/querschnitt
epic/sammlung
needs-clarification
prio/could
prio/must
prio/should
size/l
size/m
size/s
size/xl
status/in-progress
status/ready-for-merge
status/spec-review
type/bug
type/epic
type/story
type/tech
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: cschlaefke/Shuffle#36
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/1-01c-passwort-reset"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zusammenfassung
Passwort-Reset für #1 (KTO-01, PR 01c):
ForgotPasswordScreen, Recovery-Link imEmailLinkScreen,ResetPasswordScreenmit Recovery-Guard, Abbruch mitsignOutund Erfolgsmeldung. Dazu die Folgepunkte aus dem 01b-Review (from-Weitergabe, Resend-Aktion deaktivieren statt ausblenden). Platzhalter-Routen sind entfernt. Dies ist der letzte App-Teil von #1; Playwright-E2E (T3) und der CI-Job D2 folgen separat.Closes #1
Spec:
docs/specs/1-auth-registrierung-anmeldung.mdAkzeptanzkriterien (Anteil 01c)
emailSendLimitedwie Erfolg (F12)otp_expiredführt zu „Neuen Link anfordern“; Gültigkeit 1 h und Einmaligkeit serverseitig (API-Test in T3)Abdeckungsmatrix
forgot_password_screen_test: bekannte, unbekannte Adresse undemailSendLimitedzeigen exakt dieselben sichtbaren Texte, kein Drosselungshinweisemail_link_*_test(Recovery,otp_expired),reset_password_controller_testauth_router_test: voller Ablauf mit echtem Repository und gemocktem GoTrue-Client (Link, Reset-Seite, Navigation blockiert, Speichern, Erfolgsansicht, „Weiter“, Abbrechen ->signOut->/login);userUpdatedauch asynchron nachupdateUserfinishRecoveryohne Passwortwechsel bleibtPasswordRecovery; angemeldeter Nutzer erreicht/reset-passwordnichttoString()ohne Zugangsdaten492 Tests grün.
Abweichungen von der Spec – bitte ausdrücklich freigeben (Spec § 5.3–5.5, § 10)
userUpdated, sondern mitfinishPasswordRecovery()(Knopf „Weiter“ in der Erfolgsansicht),signedOutoder Wegfall der Sitzung. Grund: gotrue sendetuserUpdatedasynchron nachupdateUser; die Regel „angemeldet auf/reset-password->/“ hätte die Erfolgsmeldung (Krit. 9) entfernt.AuthStatus.passwordRecoveryhat dafür das FeldpasswordChanged;finishRecoverygreift nur, wenn es gesetzt ist./forgot-password/check-email(Modus im Pfad, übersteht Web-Reload; keine Adresse in der URL).Definition of Done
dart format,flutter analyzeohne Befund,flutter testgründocs/design/auth-screens.md,docs/design-system.mdReview
code-reviewer: kein Blocker; wichtige Punkte behoben (7c2f684):finishRecoverysetztpasswordChangedvoraus, Erfolg wird vom Repository selbst markiert (kein Warten auf das Ereignis), Formular bleibt nach Erfolg gesperrt, Spec-Widerspruch bereinigt,fromdurch Reset-Modus weitergereicht,_neverFromPathsergänzt, gemeinsamer Passwort-Fehler-Helfer, Fokus auf „Weiter“.Risiken / Folge
ForgotPasswordController(Falldefault) ein Banner. Dann wäre die Existenz erkennbar. Nicht nachgewiesen; nur mit abgeschaltetem Mailserver prüfbar. Vorschlag: Folge-Issueneeds-clarification.So testest du es lokal
🤖 Generated with Claude Code
Review- und CI-Ergebnis (01c Passwort zurücksetzen)
CI (Commit
7c2f684): alle 4 Jobs grün –flutter(1m13s),web-build(55s),supabase(3s),supabase-tests(30s).Code-Review (Agent
code-reviewer): kein Blocker. Wichtige Punkte in7c2f684behoben:finishRecoverybeendet den Guard nur nach Passwortwechsel (Tracker- und Repository-Test).userUpdatednachupdateUser; Formular bleibt nach Erfolg gesperrt.fromläuft durch den Reset-Modus,_neverFromPathsergänzt, gemeinsamer Passwort-Fehler-Helfer, Fokus auf „Weiter“.Spec-Abweichungen: von Chris im Chat freigegeben (Recovery-Guard mit „Weiter“, Route
/forgot-password/check-email, kein Resend im Reset-Modus, Erfolgstext Krit. 9).Sicherheits-Folgeissue: Mögliche Konten-Aufdeckung bei SMTP-Fehlern (Passwort-Reset/Registrierung) ist als #37 angelegt (
prio/must,needs-clarification), vor Produktiv-Release zu klären.Bitte beachten:
Closes #1).Merge durch Chris.