Функция Vuex выполняется раньше других - PullRequest
0 голосов
/ 25 сентября 2018

Я использую Vue + Vuex , чтобы удалить токен пользователя из localStorage , чтобы сделать выход пользователя из системы и перенаправить его на страницу входа.

КомпонентКод выхода из системы:

methods: {
      logout () {
        this.$store.dispatch('logout')
          .then(response => {
            this.$router.push({ name: 'login'});
          }).catch((e) => {
            console.log(e);
          });
      }
    }

Код действия магазина:

logout({commit}) {
    return new Promise((resolve, reject) => {
      try {
        commit('logout');
        resolve("done");
      } catch (e) {
        reject(e);
      }
    });
  }

Функция сохранения мутации:

logout (state) {
    localStorage.removeItem('user');
    state.is_logged_in = false;
    state.user = null;
  }

Проблема:

Что происходит:

  1. Перенаправление пользователя на страницу входа.
  2. Перенаправление пользователя обратно на панель управления.
  3. Маркер доступа пользователя удален.

Таким образом, пользователь остается на той же странице.

Это означает:

Метод action отправляется, затем возвращается к методу выхода из компонента, а затем фиксирует мутацию.

1 Ответ

0 голосов
/ 12 февраля 2019

Я просто покажу вам свою функцию выхода из системы, возможно, она вам поможет:

  logout() {
      this.$store.dispatch("setToken", null);
      this.$store.dispatch("setAdmin", null);
      this.$router.push({
        name: "root"
      });
    }

и в магазине:

mutations: {
    setToken (state, token) {
      state.token = token
      if (token) {
        state.isAdminLoggedIn = true
      } else {
        state.isAdminLoggedIn = false
      }
    },
    setAdmin (state, admin) {
      state.admin = admin
    }
  },
  actions: {
    setToken ({ commit }, token) {
      commit('setToken', token)
    },
    setAdmin ({ commit }, admin) {
      commit('setAdmin', admin)
    }
...