Idb-keyval представляет собой высокоуровневую обёртку над IndexedDB, предоставляющую простой и удобный интерфейс для хранения ключ–значение данных в браузере. Одним из частых сценариев является необходимость очистки пользовательских данных при выходе из аккаунта, чтобы предотвратить утечку информации и гарантировать чистую среду для следующего пользователя.
Библиотека предоставляет следующие ключевые методы:
set(key, value) – сохраняет значение value
по ключу key.get(key) – извлекает значение по ключу
key.del(key) – удаляет значение по ключу
key.clear() – очищает всю базу данных, удаляя все пары
ключ–значение.keys() – возвращает массив всех ключей в базе.Для задачи очистки данных при выходе из аккаунта наиболее актуальны
методы del и clear.
Сценарий выхода из аккаунта требует удаления всех пользовательских
данных, связанных с текущей сессией. Если используется отдельная база
данных для каждого пользователя, можно применить метод
clear(). Если данные разбросаны по разным ключам, может
быть эффективнее выборочно удалять их с помощью del().
Пример использования clear() для полной очистки
базы:
import { clear } from 'idb-keyval';
async function logoutUser() {
try {
await clear();
console.log('Все данные пользователя успешно удалены.');
} catch (error) {
console.error('Ошибка при очистке данных:', error);
}
}
Метод clear() удаляет все записи в
текущей базе данных. Это особенно удобно, когда база используется
исключительно для хранения данных текущего пользователя.
Если база данных используется для хранения глобальных настроек приложения, а пользовательские данные занимают только часть ключей, стоит использовать выборочную очистку:
import { del, keys } from 'idb-keyval';
async function logoutUserSelective() {
try {
const allKeys = await keys();
const userKeys = allKeys.filter(key => key.startsWith('user_'));
await Promise.all(userKeys.map(key => del(key)));
console.log('Пользовательские данные удалены.');
} catch (error) {
console.error('Ошибка при выборочной очистке:', error);
}
}
Здесь важна логика фильтрации ключей. Префикс user_
позволяет отделять пользовательские данные от глобальных настроек. Этот
подход предотвращает случайное удаление информации, необходимой для
работы приложения.
Для корректной работы необходимо вызывать функции очистки перед завершением сессии, чтобы данные не остались в памяти браузера. В большинстве SPA (Single Page Application) это делают при вызове метода выхода из аккаунта:
async function handleLogout() {
await logoutUserSelective(); // или logoutUser()
// Очистка сессии, токенов и перенаправление на страницу логина
sessionStorage.clear();
localStorage.removeItem('authToken');
window.location.href = '/login';
}
Использование Idb-keyval вместе с sessionStorage и
localStorage позволяет полностью избавиться от следов
предыдущего пользователя.
Все методы Idb-keyval возвращают промисы. При массовой очистке данных необходимо учитывать:
try/catch или
.catch().clear() только если база полностью
посвящена пользовательским данным.del().user_ или session_), чтобы упростить
выборочную очистку.Очистка данных через Idb-keyval обеспечивает безопасное управление пользовательской информацией, поддерживает асинхронность и позволяет легко адаптировать код под разные сценарии — полное удаление или выборочное удаление ключей. Это делает библиотеку эффективным инструментом для работы с локальными хранилищами в современных веб-приложениях.