前端如何配合实现用户的“被遗忘权”删除请求?

毓琳的笔记 阅读 17

我们有个用户数据管理后台,现在要支持 GDPR 的“被遗忘权”,用户申请删除账号后,除了后端清数据,前端这边是不是也得做些处理?比如清除本地存储、取消订阅之类的。

我试过在注销时加这段清理逻辑:

localStorage.clear();
sessionStorage.clear();
// 还有 IndexedDB 和 Service Worker 缓存

但不确定是否足够,会不会漏掉什么?比如第三方 SDK(像 Google Analytics 或 Sentry)会不会还留着用户标识?有没有更系统的做法?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
长孙议谣
你这个问题思路对,但漏了不少东西。Cookies没清,第三方SDK也没处理,这些才是最坑的——GA的clientId、Sentry的用户上下文都还在。

核心就三件事:清本地存储、清Cookies、断第三方SDK。代码这样写:

// 1. 清存储
localStorage.clear();
sessionStorage.clear();
indexedDB.databases().then(dbs => dbs.forEach(db => indexedDB.deleteDatabase(db.name)));
// Service Worker
if ('serviceWorker' in navigator) {
caches.keys().then(names => names.forEach(name => caches.delete(name)));
}

// 2. 清Cookies(注意 domain 和 path)
document.cookie.split(';').forEach(c => {
document.cookie = c.replace(/^ +/, '')
.replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/;domain=' + location.hostname);
});

// 3. 第三方SDK清理(以GA和Sentry为例)
// Google Analytics
if (window.ga) {
window.ga('reset', { clientId: '' });
window.ga('set', 'userId', null);
}
// Sentry
if (window.Sentry) {
window.Sentry.configureScope(scope => scope.clear());
window.Sentry.init({ dsn: '', autoSessionTracking: false });
}

// 4. 断开WebSocket等长连接
ws?.close();
evtSource?.close();

// 5. 清理订阅
removeEventListener('*', handler);
clearInterval(timerId);


但必须说清楚:前端清理只是辅助动作,真正的“被遗忘权”必须后端先删完数据。前端清再多,服务器上数据还在的话第三方该收集还是收集。流程必须是:后端执行删除 → 返回成功 → 前端做清理 → 跳转登录页或首页。
点赞
2026-03-19 08:02