// Wylogowanie z HTTP Basic (LOG-32). // // PROBLEM, KTÓREGO NIE DA SIĘ ROZWIĄZAĆ PO STRONIE SERWERA. Basic nie ma sesji: // przeglądarka zapamiętuje login i hasło, po czym dosyła je SAMA przy każdym // żądaniu. Serwer nie ma czego „zapomnieć" — następne kliknięcie przyszłoby // z kompletem poświadczeń i weszłoby z powrotem. // // Działa natomiast doprowadzenie do tego, żeby PRZEGLĄDARKA porzuciła to, co // zapamiętała: żądanie z celowo błędnymi danymi, którym nadpisuje ona swój wpis // dla tej witryny. To jest zachowanie powszechne w przeglądarkach, ale NIE // ZAPISANE w żadnym standardzie — dlatego jest tu jako uzupełnienie, a nie // jedyny mechanizm: sama trasa /wyloguj odpowiada 401 i wymusza okienko // logowania nawet przy wyłączonym JavaScripcie. (function () { 'use strict'; function ready(fn) { if (document.readyState !== 'loading') fn(); else document.addEventListener('DOMContentLoaded', fn); } ready(function () { var link = document.querySelector('a[data-wyloguj]'); if (!link) return; link.addEventListener('click', function (e) { e.preventDefault(); // Znacznik czasu w loginie: gdyby przeglądarka zapamiętała nawet TE dane, // przy kolejnym wylogowaniu byłyby już inne, więc nie da się przypadkiem // trafić w cokolwiek działającego. var bezsensowne = 'Basic ' + btoa('wyloguj:' + Date.now()); fetch(link.href, { headers: {Authorization: bezsensowne}, cache: 'no-store', credentials: 'omit' }).catch(function () { // Brak sieci nie może zablokować wyjścia — i tak przechodzimy dalej, // bo sama trasa /wyloguj odpowie 401 i wywoła okienko logowania. }).then(function () { window.location.href = link.href; }); }); }); })();