gpt4 book ai didi

firebase - onSnapshot : Error: Missing or insufficient permissions on signOut() 中 Uncaught Error

转载 作者:行者123 更新时间:2023-12-01 12:09:14 26 4
gpt4 key购买 nike

我正在按照 vuegram 的说明使用 vuex 和 firebase 来实现用户身份验证.我尝试了很多方法来分离 firebase 监听器,唯一停止警告错误的方法如下:

var unsubscribe=fb.auth.onAuthStateChanged(user=>{
if(user){
store.commit('setCurrentUser',user)
store.dispatch('fetchUserProfile')

fb.usersCollection.doc(user.uid).onSnapshot(doc => {
store.commit('setUserProfile', doc.data())
})
}
})
unsubscribe();

但是,上面的代码只是停止对 signOut() 发出警告,我无法再更新数据。

我的 store.js 文件:
var unsubscribe=fb.auth.onAuthStateChanged(user=>{
if(user){
store.commit('setCurrentUser',user)
store.dispatch('fetchUserProfile')

fb.usersCollection.doc(user.uid).onSnapshot(doc => {
store.commit('setUserProfile', doc.data())
})
}
})

export const store=new Vuex.Store({
state:{
currentUser:null,
userProfile:{}
},
actions:{
clearData({commit}){
commit('setCurrentUser',null)
commit('setUserProfile', {})
},
fetchUserProfile({ commit, state }) {
fb.usersCollection.doc(state.currentUser.uid).get().then(res => {
commit('setUserProfile', res.data())

}).catch(err => {
console.log(err)
})
},
updateProfile({ commit, state }, data) {
let displayName = data.displayName

fb.usersCollection.doc(state.currentUser.uid).set({
displayName: displayName
}, {merge:true}).then(function() {
alert("Document successfully written!");
})
.catch(function(error) {
alert("Error writing document: ", error);
});
}
},
mutations:{
setCurrentUser(state, val) {
state.currentUser = val
},
setUserProfile(state, val) {
state.userProfile = val
}
}
})

checkout 方法:
signOut: function(){
fb.auth.signOut().then(()=> {
this.$store.dispatch('clearData')
this.$router.push('login')
}).catch(function(error) {
console.log(error);
});
}

我的火力点规则:
allow read, write: if request.auth.uid!=null;

最佳答案

由于您在注销时仍有一个事件监听器,因此系统检测到客户端已失去读取该数据的权限并拒绝该监听器。这意味着您需要在注销之前删除监听器以防止出现错误消息。

documentation on detaching listeners ,当您附加监听器时,您首先会获得对取消订阅功能的引用:

unsubscribe = fb.usersCollection.doc(user.uid).onSnapshot(doc => {
store.commit('setUserProfile', doc.data())
})

然后在退出之前调用该函数:
signOut: function(){
unsubscribe();
fb.auth.signOut().then(()=> {
this.$store.dispatch('clearData')
this.$router.push('login')
}).catch(function(error) {
console.log(error);
});
}

关于firebase - onSnapshot : Error: Missing or insufficient permissions on signOut() 中 Uncaught Error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53584888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com