Синхронизация магазина с файлами cookie в nuxtServerInit - NuxtJS - PullRequest
0 голосов
/ 23 сентября 2019

Я использую модуль проверки подлинности NuxtJS и пытаюсь получить токен Bearer и специальный файл cookie, который содержит sessionType для nuxtServerInit, чтобы я мог обновить store с помощью mutation, но он работает только при перезагрузке страницы.

Если я закрываю браузер и перехожу непосредственно к URL своего приложения, я получаю неопределенное значение для auth._token.local, потому что nuxtServerInit выполняется до того, как файлы cookie готовы.

Мой код вstore / index.js выглядит следующим образом:

export const actions = {
  async nuxtServerInit({ commit, dispatch }, { req }) {
    // Parse cookies with cookie-universal-nuxt
    const token = this.$cookies.get('token')
    const sessionType = this.$cookies.get('sessionType')

   // Check if Cookie user and token exists to set them in 'auth'
    if (token && user) {
      commit('auth/SET_TOKEN', token)
      commit('auth/SET_SESSION_TYPE', user)
    }
  }
}

Я использую библиотеку nuxt-universal-cookies.

Как выполнить действие после загрузки файлов cookie в браузер

1 Ответ

1 голос
/ 23 сентября 2019

Когда он работает с F5, а не нажатием Enter, я подозреваю, что иногда он работает, а иногда нет, потому что F5 и Enter должны вызывать такое же поведение в Nuxt (кроме некоторых заголовков кэша).

Единственная подозрительная вещь в вашем коде - это использование функции async, когда функция не возвращает или не ожидает какого-либо обещания.

Таким образом, вы либо await для action

export const actions = {
  async nuxtServerInit({ commit, dispatch }, { req }) {
    // Parse cookies with cookie-universal-nuxt
    const token = this.$cookies.get('token')
    const sessionType = this.$cookies.get('sessionType')

   // Check if Cookie user and token exists to set them in 'auth'
    if (token && user) {
      await dispatch('SET_SESSION', {token, user})
      //commit('auth/SET_TOKEN', token)
      //commit('auth/SET_SESSION_TYPE', user)
    }
  }
}

или вы удалили асинхронную из объявления

export const actions = {
  nuxtServerInit({ commit, dispatch }, { req }) {
    // Parse cookies with cookie-universal-nuxt
    const token = this.$cookies.get('token')
    const sessionType = this.$cookies.get('sessionType')

   // Check if Cookie user and token exists to set them in 'auth'
    if (token && user) {
      commit('auth/SET_TOKEN', token)
      commit('auth/SET_SESSION_TYPE', user)
    }
  }
}
...