Nuxt Auth loggedIn состояние кэшируется

У меня проблемы с состоянием входа Nuxt Auth. Я использую Nuxt JS в универсальном режиме и аутентифицируюсь с помощью Nuxt Auth.

Когда пользователь выходит из системы, состояние $ auth.loggedIn разрешается соответствующим образом в этом сеансе. У меня нет перенаправления во время $ auth.logout (), но есть условные операторы, которые разрешают все потребности состояния выхода из системы. Когда пользователь выходит из этого сеанса, все в порядке.

Проблема возникает с моим экземпляром PWA, где начальный URL-адрес указывает на: http://example.com/pwa И отсюда выполняется перенаправление ($ router.push (redirectPage)) в соответствующее место после монтирования (). Замечание: я попытался перенаправить серверную часть, но не смог обойти проблемы с гидратацией, так что это казалось достаточно приличной альтернативой.

После logout (), когда PWA открывает start_url, $ auth.loggedIn показывает true, даже если пользователь вышел из системы. Это конфликт с локальным хранилищем и файлами cookie, которые для ключей аутентификации показывают false.

Когда я отлаживаю это в Chrome и выполняю жесткое обновление, он соответствующим образом разрешает $ auth.loggedIn как false. Без жесткого обновления это будет верно.

Похоже, это какая-то проблема с кешем. Кроме того, я использую модуль Nuxt PWA. Я не уверен, что это проблема сервис-воркера с кешированием хранилища vuex.

Любые идеи приветствуются.

Вот конфигурация аутентификации:

auth: {
        redirect: false,
        strategies: {
            local: false,
            password_grant: {
                scheme: 'local',
                token: {
                    property: 'access_token'
                },
                endpoints: {
                    login: {
                        url: '/oauth/token',
                        method: 'post',
                        propertyName: 'access_token'
                    },
                    logout: false,
                    user: {
                        url: 'api/auth/me',
                        method: 'get',
                        propertyName: 'user'
                    },
                }
            },
}

Конфигурация рабочего окна PWA использует все значения кеша по умолчанию.


person user1666858    schedule 28.04.2021    source источник


Ответы (1)


Я разобрался в проблеме. Модуль Nuxt PWA добавляет start_url в предварительный кеш. Возможно, это требование, чтобы разрешить автономные PWA. Поскольку start_url предварительно кэшировался, он не менял состояния после входа / выхода. Чтобы обойти это, при каждом входе / выходе я также обновляю запись предварительного кеширования start_url следующим образом:

//delete pre-cache start_url, then re-add, to refresh logged state
caches.open('cache-name').then(function(cache) {
  cache.keys().then( (arrayOfRequest) => {
    arrayOfRequest.forEach(function(request) {
      if (request.url.indexOf('start_url') !== -1) {
        cache.delete(request.url)
        cache.add(request.url)
      }
    })
  });
})
person user1666858    schedule 03.05.2021