Przycisk wylogowania (LOG-32) #75
Reference in New Issue
Block a user
Delete Branch "fix/wylogowanie"
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?
Aplikacja nie miała jak z siebie wyjść: raz podane hasło działało do zamknięcia przeglądarki, a na wspólnym komputerze nie było sposobu, żeby oddać ekran komuś innemu.
Rzecz, którą trzeba powiedzieć wprost
HTTP Basic nie ma prawdziwego wylogowania. Nie ma sesji do skasowania: przeglądarka zapamiętuje login i hasło, po czym dosyła je sama przy każdym żądaniu. Serwer nie ma czego zapomnieć — kolejne kliknięcie przyszłoby z kompletem poświadczeń i weszłoby z powrotem.
Działa natomiast doprowadzenie do tego, żeby to przeglądarka porzuciła zapamiętane dane. Robimy to dwutorowo, bo żadne z osobna nie wystarcza:
/wylogujzawsze zwraca 401 zWWW-Authenticatewyloguj.jswysyła żądanie z celowo błędnymi danymiStrona wylogowania mówi wprost, że pewnym sposobem w każdej przeglądarce jest zamknięcie okna. Nie obiecuję więcej, niż Basic potrafi: obietnica bez pokrycia byłaby tu gorsza od braku przycisku, bo dawałaby złudzenie, że ekran jest oddany.
Szczegóły, które nie są przypadkowe
Weryfikacja
8 nowych testów; prezentacja 311 zielonych.
Sprawdzone w przeglądarce: oba żądania wychodzą (to z błędnymi danymi i samo przejście), oba wracają 401, strona renderuje się poprawnie, przycisk stoi na końcu paska oddzielony od zakładek.
Czego nie dało się tu potwierdzić: samego unieważnienia pamięci poświadczeń — wymaga okienka systemowego, którego automat nie obsłuży. To jest ta część opierająca się na zachowaniu przeglądarki, więc warto sprawdzić ją ręcznie po wdrożeniu.
🤖 Generated with Claude Code
Aplikacja nie miała jak z siebie wyjść: raz podane hasło działało do zamknięcia przeglądarki, a na wspólnym komputerze nie było sposobu, żeby oddać ekran komuś innemu. HTTP BASIC NIE MA PRAWDZIWEGO WYLOGOWANIA i to jest sedno tej zmiany. Nie ma sesji do skasowania: przeglądarka zapamiętuje login i hasło, po czym dosyła je SAMA przy każdym żądaniu. Serwer nie ma czego zapomnieć — kolejne kliknięcie przyszłoby z kompletem poświadczeń i weszłoby z powrotem. Działa natomiast doprowadzenie do tego, żeby to PRZEGLĄDARKA porzuciła zapamiętane dane, i robimy to dwutorowo, bo ani jedno, ani drugie osobno nie wystarcza: 1. /wyloguj odpowiada ZAWSZE 401 z nagłówkiem WWW-Authenticate, co wymusza ponowne pytanie o hasło. Działa bez JavaScriptu, ale samo w sobie zostawia stare dane w pamięci przeglądarki: po anulowaniu okienka wystarczyłoby wejść na dowolny adres, żeby wrócić do środka. 2. wyloguj.js wysyła żądanie z CELOWO błędnymi danymi, którym przeglądarka nadpisuje swój wpis. To jest część, która faktycznie czyści pamięć — ale opiera się na zachowaniu powszechnym, a nie zapisanym w standardzie, więc nie może być jedynym mechanizmem. Strona wylogowania mówi wprost, że pewnym sposobem w KAŻDEJ przeglądarce jest zamknięcie okna. Nie obiecujemy więcej, niż Basic potrafi — obietnica bez pokrycia byłaby tu gorsza od braku przycisku, bo dawałaby złudzenie, że ekran jest oddany. Trasa stoi POZA bramką logowania, celowo: inaczej dostałaby 200 od zalogowanej sesji i nie miałaby jak odpowiedzieć 401. Odpowiada też bez logowania — inaczej wyjście wymagałoby bycia w środku, co jest błędnym kołem. Nagłówki zakazują zapamiętania strony, bo oddana z pamięci podręcznej nie dotarłaby do serwera i okienko w ogóle by się nie pojawiło. Obok wyjścia pokazujemy, KTO jest zalogowany: bez tego przycisk jest w połowie bezużyteczny, bo na wspólnym komputerze nie wiadomo, kogo się wylogowuje. Przy wyłączonym logowaniu nie ma ani jednego, ani drugiego — przycisk sugerowałby ochronę, której nie ma. Sprawdzone w przeglądarce: oba żądania wychodzą (to z błędnymi danymi i samo przejście), oba wracają 401, strona renderuje się poprawnie. Samego unieważnienia pamięci poświadczeń NIE dało się tu potwierdzić — wymaga okienka systemowego, którego automat nie obsłuży. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>