如何在Vuex store中存储firebase token?

问题描述 投票:0回答:1

我试图将从Firebase返回的accessToken存储到我的Vuex项目中的Vuex存储中,当我运行这段代码时,我得到以下错误。

Uncaught TypeError: 无法读取未定义的属性'$store'。

在下面的代码中,它似乎没有接收到store.js,有什么想法,为什么会这样?

谢谢你

登录.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
    }
  },
})

主.js

import store from './store.js'

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

firebase vue.js nuxt.js
1个回答
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
   });
© www.soinside.com 2019 - 2024. All rights reserved.