首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自定义auth声明查询消防站(使用vuexfire)

如何使用自定义auth声明查询消防站(使用vuexfire)
EN

Stack Overflow用户
提问于 2020-02-07 18:57:17
回答 1查看 414关注 0票数 0

在我的vuex中,我有一个自定义的auth请求保存到state (state.claims)。我可以在我的vue组件中从状态中读到这一点,我也可以在vue devtools中看到它。

但是,当我试图使用state.claims查询一个消防局集合时,有时会得到null(状态中的默认值),或者一个我无法复制的错误,说它是一个“自定义对象B”

它在第一次加载时工作,但经过一次刷新之后,它会中断,直到我来回切换视图为止。

我的猜测是,它没有足够快地攫取价值,用于索赔,但我不确定

Vuex商店

代码语言:javascript
复制
import Vue from "vue";
import Vuex from "vuex";
import { vuexfireMutations, firestoreAction } from 'vuexfire'
import {db} from "@/components/fbInit.js";
import firebase from 'firebase'

Vue.use(Vuex);

export default new Vuex.Store({

  state: {    
    tests:  [],
    claims: [],
    user:       null,
    isLoggedIn: false,

  },

  mutations: {
    ...vuexfireMutations,

    setUser: state => {
      if (firebase.auth().currentUser) {
        state.isLoggedIn = true;
        state.user = firebase.auth().currentUser;
        state.claims = firebase.auth().currentUser.getIdTokenResult().then((idTokenResult) => {
          state.claims = idTokenResult.claims.company
        }) .catch((error) => {
          // eslint-disable-next-line no-console
          console.log(error);
        });
      }
    },

  },

  actions: {

    //  GET documents in a collection/subcollection and put them into state
    getFire:  firestoreAction(({ bindFirestoreRef, state }) => {
      //return the promise returned by 'bindFirestoreRef'
      return bindFirestoreRef('tests', db.collection(state.claims))
    }), 

 setUser: context => {
      context.commit('setUser');  //context.commit to perform mutation
    },
  }
})

Vue组件

代码语言:javascript
复制
<template>
  <div class="pa-9">
    <div>
      <v-card light>
        {{ this.claims}} 
      </v-card>
       <v-card >
        {{ this.tests }}
      </v-card>
    </div>
  </div>

</template>

<script>

import {db, functions } from '../components/fbInit'
import { mapState }   from 'vuex'
import { mapActions } from 'vuex'

export default {
  name: "Claims",

  data: () => ({

  }),
  created() {
    this.setUser()
    this.getFire()

      },

    computed: {
    ...mapState ([
      'events','wow','user','isLoggedIn', 'claims','tests'
    ]),
  },

  methods: {

     ...mapActions([ 'setUser', 'getFire',  ]),

      });
    }
  },
};
</script>

误差

代码语言:javascript
复制
FirebaseError: Function Firestore.collection() requires its first argument to be of type non-empty string, but it was: a custom B object

[Vue warn]: Error in render: "TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'B'
    |     property 'c' -> object with constructor 'B'
    |     property 'b' -> object with constructor 'Wb'
    --- property 'a' closes the circle"
FirebaseError: Function Firestore.collection() requires its first argument to be of type non-empty string, but it was: null

编辑Main.js

代码语言:javascript
复制
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

require('dotenv').config();
import vuetify from './plugins/vuetify';
// require('@/components/fb.js')
import firebase from 'firebase/app'
import './components/fbInit'

import * as VueGoogleMaps from 'vue2-google-maps';



Vue.config.productionTip = false
/* eslint-disable */
let app;
firebase.auth().onAuthStateChanged(user => {
  if(!app) {
    app = new Vue({
      router,
      vuetify,store,
      render: h => h(App)
    }).$mount('#app')
  }
})
EN

回答 1

Stack Overflow用户

发布于 2020-02-10 12:50:00

我找到了一些文档。看看这里的例子,statefirestoreAction(({ bindFirestoreRef, state })中应该在}之后。所以应该是:

firestoreAction(({ bindFirestoreRef }, state )

然而,我不确定如果没有unbindFirestoreRef,它是否会工作.

我希望它能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60119506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档