Run 01-03: Login/logout + middleware + protected
Dokončeno
Uzavřít MVP auth flow: login, logout, middleware, /account, env vars, dev cookie
Od: 2026-05-18 Do: 2026-05-18 Vytvořeno 18. 5. 2026
7/7
100%
Tasky v runu
Otevřít kanban →| ID | Název | Status | Priorita | Vytvořeno |
|---|---|---|---|---|
| 163 | Zapojení env vars do session cookie + dev/prod Secure flag Cookie attributes (HttpOnly/Secure/SameSite) byly hardcoded a env vars (SESSION_COOKIE_NAME, SESSION_TTL_DAYS) viseli nezapojené. Vznikl nový auth/config.ts který přes Effect.gen čte env a vrátí CookieConfig (name, maxAge, secure z import.meta.env.PROD); pokud chybí cookie name, fail s ConfigMissing. Session cookie serialize/clear přijímá secure: boolean — dev běh bez HTTPS funguje. | Hotovo | Střední | 18. 5. 2026 |
| 164 | Login endpoint Nový endpoint src/pages/api/auth/login.ts — POST form/JSON, findByEmail → verify PBKDF2 → vytvoří session a vrátí cookie. UserNotFound i wrong_password se klientovi vrací jako jeden tag invalid_credentials, aby chyba neodhalila existenci účtu. Login schema (src/auth/schemas/login.ts) vyžaduje jen přítomnost hesla, ne min 8, kvůli legacy slabým heslům. | Hotovo | Střední | 18. 5. 2026 |
| 165 | Login form stránka Nová stránka src/pages/login.astro mirroring signup form — prerender=false, error banner z URL query (invalid_credentials/validation/internal), link na signup. Czech labels. | Hotovo | Střední | 18. 5. 2026 |
| 166 | Logout endpoint Nový endpoint src/pages/api/auth/logout.ts — idempotent (vždy 303 → /), revoke session když cookie existuje, clear-cookie header. Žádný 404 při chybějící cookie aby logout fungoval i po expiraci. | Hotovo | Střední | 18. 5. 2026 |
| 167 | Auth middleware Nový src/middleware.ts s defineMiddleware — parse session cookie, lookup přes Session service, populate Astro.locals.user + locals.session. SessionExpired catchTag → silent Option.none (uživatel se chová jako anonymní). DbError i ConfigMissing v middleware se logují a fallthrough na null locals (nezhroutí stránku). | Hotovo | Střední | 18. 5. 2026 |
| 168 | Protected /account stránka Nová stránka src/pages/account.astro — prerender=false, čte Astro.locals.user, redirect na /login pokud null. Per-page guard místo middleware-driven redirect (žádný hidden seznam protected rout). | Hotovo | Střední | 18. 5. 2026 |
| 169 | Sprint 001 audit pnpm tsc --noEmit a pnpm astro check oba běží clean. Jeden typecheck error po prvním write (passwordHash je nullable v schema, login musí na null branch vrátit no_password) opraven přidáním passwordHash null guardu v login.ts před verify. | Hotovo | Střední | 18. 5. 2026 |
Screenshoty
0
Žádné screenshoty. Nahraj první.