Проверяет понимание синхронизации состояния аутентификации между вкладками браузера и умение применять механизмы cross-tab коммуникации.
Проблема возникает, когда приложение открыто в нескольких вкладках: пользователь выходит в одной, а в остальных он остаётся авторизованным. Это небезопасно и создаёт рассинхронизацию UI. Нужен механизм, который уведомит все вкладки одного origin о смене статуса аутентификации.
Событие storage срабатывает в других вкладках того же origin при изменении localStorage или sessionStorage. Важно: в той вкладке, где произошло изменение, событие не срабатывает — только в остальных. Это идеально подходит для синхронизации logout.
// auth.js
function logout() {
localStorage.removeItem('token');
localStorage.setItem('logout', Date.now()); // триггер для других вкладок
redirectToLogin();
}
window.addEventListener('storage', (e) => {
if (e.key === 'logout' || e.key === 'token') {
redirectToLogin();
}
});Более явный и современный API. Позволяет отправлять произвольные сообщения между вкладками одного origin без хаков с localStorage.
const channel = new BroadcastChannel('auth');
function logout() {
localStorage.removeItem('token');
channel.postMessage({ type: 'LOGOUT' });
redirectToLogin();
}
channel.onmessage = (e) => {
if (e.data.type === 'LOGOUT') redirectToLogin();
};Итог: для синхронизации logout между вкладками используйте событие storage как базовый вариант или BroadcastChannel для более явной коммуникации; это гарантирует единое состояние аутентификации во всём приложении.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию