如何在Vuex存储中存储Firebase令牌

时间:2020-05-23 17:06:00

标签: firebase vue.js nuxt.js

当我运行代码时,我尝试将从Firebase返回的accessToken存储到我的Vue项目中的Vuex存储中,

未捕获的TypeError:无法读取未定义的属性'$ store'

似乎没有在下面的代码中选择store.js,有什么主意吗?

谢谢

Login.vue

mounted: function() {
    Firebase.auth.onAuthStateChanged( user => {

        if (user) {
          user.getIdToken().then(function(idToken) {
            this.$store.commit('setStoreToken', idToken)
            return idToken
          });

        }
        else {
          .
          .
          . 
        }



store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    loggedIn: false,
    accessToken: '',
  },
  mutations: {
    loggedIn () {
      this.state.loggedIn = true
    },
    loggedOut () {
      this.state.loggedIn = false
    },
    setStoreToken(state, accessToken) {
      state.accessToken = accessToken
    },
  },
  getters: {
    getAccessToken: state => {
      return state.accessToken
    }
  },
})

main.js

import store from './store.js'

new Vue({
  store,
  router,
  render: h => h(App),
}).$mount('#app')

1 个答案:

答案 0 :(得分:2)

我的猜测:

   user.getIdToken().then(function(idToken) {
     this.$store.commit('setStoreToken', idToken)
     return idToken
   });

您不使用箭头函数,这意味着this已绑定到函数本身,您可以使用箭头函数,也可以在其前面创建变量,例如const self = this

   user.getIdToken().then((idToken)=>{
     this.$store.commit('setStoreToken', idToken)
     return idToken
   });

或者您这样做:

   const self = this;
   user.getIdToken().then(function(idToken) {
     self.$store.commit('setStoreToken', idToken)
     return idToken
   });