Files
2026-07-12 19:21:35 +02:00

76 lines
3.4 KiB
Markdown

---
plan_id: 20260712-1647-zapamietywanie-logowania
title: Zapamiętywanie logowania przez 30 dni
completed: 2026-07-12T17:31:28+02:00
storage: plan-first
quality_radar: degraded
---
# Summary: Zapamiętywanie logowania przez 30 dni
## Objective
Dodano opcjonalne logowanie zapamiętane przez 30 dni z niezależnym tokenem dla każdego komputera.
## What Was Built
| Area | Result |
|------|--------|
| Dane | Tabela `remember_tokens` z selektorem, hashem walidatora i terminem ważności; tabela utworzona również na zdalnej bazie. |
| Logowanie | Checkbox `remember` wystawia 30-dniowe cookie tylko po zaznaczeniu. |
| Ochrona tras | `AuthFilter` odtwarza zwykłą sesję z poprawnego tokenu. |
| Wylogowanie | Usuwa token wyłącznie bieżącego urządzenia, cookie i sesję. |
| Test | Dodano jeden test dwóch tokenów, manipulacji walidatorem i selektywnego unieważnienia. |
## Files Modified
- `app/Database/Migrations/2026-07-12-160001_CreateRememberTokens.php` — schemat tokenów.
- `app/Models/RememberTokenModel.php` — wystawianie, weryfikacja i usuwanie tokenów.
- `app/Controllers/Auth.php` — wystawianie cookie i selektywne wylogowanie.
- `app/Filters/AuthFilter.php` — odtworzenie sesji.
- `app/Views/auth/login.php` — checkbox „Zapamiętaj mnie”.
- `tests/unit/RememberTokenModelTest.php` — kontrola logiki wielu urządzeń.
## Acceptance Criteria Results
| Criterion | Status | Evidence |
|-----------|--------|----------|
| AC-1 | Pass | Bez checkboxa `Auth::login` nie wystawia trwałego cookie. |
| AC-2 | Partial | Kod, cookie 30 dni i zdalna tabela są gotowe; brak potwierdzonego końcowego UAT po migracji. |
| AC-3 | Partial | Model dopisuje niezależne rekordy, a logout usuwa bieżący selektor; test nie został uruchomiony lokalnie. |
| AC-4 | Partial | Filtr odrzuca zły/wygasły token i usuwa cookie; test nie został uruchomiony lokalnie. |
## Verification Results
| Check | Result | Notes |
|-------|--------|-------|
| `php -l` dla 6 plików | Pass | Brak błędów składni. |
| `vendor/bin/phpunit tests/unit/RememberTokenModelTest.php` | Skipped | Lokalnie brak `vendor/` i `vendor/bin/phpunit`. |
| Zdalny `remember_tokens` | Pass | Potwierdzono 6 kolumn i 3 indeksy. |
| UAT w dwóch profilach | Skipped | Niepotwierdzony przez użytkownika po aktualizacji bazy. |
## Quality Radar Results
**Status:** degraded
- New risks: wdrożenie kodu przed migracją powoduje błąd DB przy użyciu tokenu.
- Resolved risks: zdalna tabela została utworzona; surowy walidator nie trafia do bazy.
- Deferred risks: test PHPUnit i UAT dwóch profili — środowisko lokalne nie ma `vendor/`, UAT wymaga potwierdzenia przeglądarkowego.
- Raw outputs: `.paul/codebase/radar/codebase-memory-post-apply.txt`.
## Deviations
- PHPUnit nie został uruchomiony lokalnie; wykonano lint pliku testowego.
- UAT w dwóch profilach nie został potwierdzony przed UNIFY.
- Legacy `ROADMAP.md` pominięto w trybie plan-first. Commit fazowy pominięto zgodnie z `preferences.auto_commit: false` oraz z powodu licznych niezwiązanych zmian w working tree.
## Key Decisions / Patterns
- Osobny token per urządzenie zamiast wydłużania globalnej sesji.
- W bazie przechowywany jest wyłącznie hash walidatora.
- Wylogowanie nie usuwa tokenów innych urządzeń.
## Follow-up
- Jednorazowo potwierdzić logowanie w dwóch profilach, zamknięcie sesji i wylogowanie tylko jednego profilu.