【发布时间】:2020-07-19 04:29:40
【问题描述】:
我正在使用 Vuex 和 Firebase 身份验证。重新加载页面时卡住了。 firebase.auth().onAuthStateChanged 需要时间来响应。但我需要同时重新加载页面。我在互联网上看过很多教程,其中大部分是路由器保护,但我不想要。我有一些用户登录的路线,然后可以导航到该路线。
我正在申请的 App.vue。
created () {
firebase.auth().onAuthStateChanged(async user =>{
if (user){
await this.$store.dispatch('autoSignIn',user)
}
})
}
如果用户在重新加载页面之前登录,则这是我在重新加载页面时触发自动登录的 vuex 操作。
autoSignIn ({commit}, payload) {
commit('setUser',{email:payload.email, userId:payload.uid})
}
这是我的吸气剂
isAuthenticated:state => {
return state.user !== null && state.user !== undefined ? state.user : null
}
这里我称我的 getter isAuthenticated。
getEventsByUser({getters,commit}){
let data = [];
firebase.database().ref('usuario/' + getters.isAuthenticated.userId + '/eventos/')
.on("value", eventos =>{
eventos.forEach(evento =>{
data.push({"id":evento.key, ...evento.val()})
});
commit('setEventsByUser',data)
})
},
这是调度动作的组件
<template>
<div>
<div v-for="(event,id) in getEventsByUser" :key="id">
{{event}}
</div>
</div>
</template>
<script>
export default {
name: "MyEvents",
computed:{
getEventsByUser(){
return this.$store.getters.getEventsByUser;
},
},
mounted() {
this.$store.dispatch('getEventsByUser')
},
}
【问题讨论】:
-
据我所知,没有任何代码试图读取
userId,但这就是错误消息的含义。您确定错误来自您共享的代码吗?堆栈跟踪似乎指向getEventsByUser -
嗨@Frank van Puffelen,我上传了使用isAuthenticated getter和使用userId的代码
-
我从评论框中删除了代码。我坚持这一点,每当我刷新页面时,它都会给我这个错误。谢谢
标签: javascript vue.js firebase-authentication vuex