--- 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.