【问题标题】:Unsubscribe Firestore listener on logout注销时取消订阅 Firestore 侦听器
【发布时间】:2020-07-05 00:20:54
【问题描述】:

解释了这样做的直接方法here

但是我很难在 onAuthStateChanged 中触发取消订阅,它位于不同的 vuex 模块中

存储/user.js

...
  onAuthStateChanged({ commit, dispatch }, { authUser }) {
    if (!authUser) {
      commit('RESET_STORE')
      this.$router.push('/')
      return
    }
    commit('SET_AUTH_USER', { authUser })
    dispatch('database/getUserItems', null, { root: true })
    this.$router.push('/home')
  }
...

存储/database.js

...
getUserItems({ state, commit }, payload) {
    const unsubscribe = this.$fireStore
      .collection('useritems')
      .where('owner', '==', this.state.user.authUser.uid)
      .onSnapshot(
        (querySnapshot) => {
          querySnapshot.forEach(function(doc) {
          // STUFF
        },
        (error) => {
          console.log(error)
        }
      )
  },
...

用户注销时如何从user.js模块引用unsubscribe()(authUser undefined)?

【问题讨论】:

    标签: firebase vue.js google-cloud-firestore firebase-authentication nuxt.js


    【解决方案1】:

    我认为你可以将它保存在你的 Vuex state 树中并从那里调用它。

      state: {
        //....
        listenerUnsubscribe: null,
        //....
      },
      mutations: {
        //....
        SET_LISTENER_UNSUBSCRIBE(state, val) {
            state.listenerUnsubscribe = val;
        },
        RESET_STORE(state) {
            state.listenerUnsubscribe()
        }
        //....
      },
      actions: {
        //....
        getUserItems({ state, commit }, payload) {
            const unsubscribe = this.$fireStore
            .collection('useritems')
            .where('owner', '==', this.state.user.authUser.uid)
            .onSnapshot((querySnapshot) => {
                querySnapshot.forEach(function(doc) {
                // STUFF
                },
                (error) => {
                console.log(error)
                }
            );
            commit('SET_LISTENER_UNSUBSCRIBE', unsubscribe);
        },
    

    【讨论】:

    • 我已经尝试过了,不幸的是它总是返回错误Uncaught (in promise) TypeError: state.listenerUnsubscribe is not a function
    • 我刚刚尝试过,它确实对我有用。您能否在您的问题中分享您的整个代码,包括您如何称呼 RESET_STORE 突变(请编辑问题并添加您的新代码)。
    • 好的,我搞定了。我唯一改变的是在 fireauth.signout() 调用之前调用 unsubscribe() 提交,而不是在 onAuthStateChanged() 中。基本上你将函数保存到 vuex 的方法是有效的。
    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    相关资源
    最近更新 更多