Кэш Service Worker для сброса при изменении пользователя - PullRequest
0 голосов
/ 30 октября 2019

Я установил базовую установку работника службы для разрабатываемого приложения.

У этого работника службы возникает много проблем, когда пользователи выходят из системы и выполняют вход с другим именем пользователя. Или даже иногда это блокирует вход.

Я в основном знаю, что происходит, я просто не могу понять, как это исправить.

Итак, мое приложение предназначено исключительно для зарегистрированных пользователей, поэтомунеавторизованный пользователь может только просматривать страницу входа.

Моя первая проблема заключается в том, что когда пользователь входит в систему, страница панели мониторинга кэшируется, а если они выходят из системы и выполняют вход в качестве другого использования, отображается панель мониторинга первого пользователя. (В верхней части страницы отображается неверное имя пользователя)

Вторая проблема заключается в том, что иногда страница входа кэшируется таким образом, что она постоянно перенаправляет пользователей обратно на страницу входа, даже если они успешно вошли в систему.

Все эти проблемы полностью устраняются, как только пользователь делает ctrl + f5, поскольку он не использует кэш и не получает весь контент прямо из сети.

Вот мой sw.jsфайл:

importScripts( '/cache-polyfill.js' );

var CACHE_NAME = 'XYZ-cache-v0.4.16';

var assetsToCache = [
    // A list of CSS, JS, Images and font files
];

self.addEventListener( 'install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME).then(cache => cache.addAll(assetsToCache))
  );
});

self.addEventListener('activate', async (e) => {
  e.waitUntil(
    caches.keys().then((keyList) => {
      return Promise.all(keyList.map((key) => {
        if(CACHE_NAME.indexOf(key) === -1) {
          return caches.delete(key);
        }
      }));
    })
  );
});

self.addEventListener('fetch', (e) => {
  e.respondWith(
    caches.match(e.request).then((r) => {
      return r || fetch(e.request).then((response) => {
        return caches.open(CACHE_NAME).then((cache) => {
          cache.put(e.request, response.clone());
          return response;
        });
      });
    })
  );
});

1 Ответ

0 голосов
/ 31 октября 2019

Хорошо, вы должны подумать, разумно ли сначала кэшировать PII (https://en.wikipedia.org/wiki/Personal_data)). Если это именно то, что вам действительно нужно, то вам следует реализовать механизм, который очищает кеши при первом сеансе пользователя. срок действия истекает.

Вы можете использовать postMessage API (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) для отправки сообщения в Service Worker, когда происходит выход из системы. Затем внутри вашего Service Worker есть некоторые функции, которые очищают кеши. .

Это само по себе - очистка кешей, когда пользователь специально нажимает кнопку «Выйти» - скорее всего, недостаточно. Сеансы входа в систему обычно ограничены определенным периодом времени, поэтому вам потребуется логика, которая определяет, когда сеансзавершается, а затем очищает кэши, даже если пользователь НЕ щелкнул по выходу из системы.

Может быть, страница входа не должна кэшироваться вообще - она ​​не может работать, когда нет соединения, верно?

...