使用JavaScript库运行Firestore事务时,出现Firebase错误“ 错误:由于令牌更改而导致getToken中止”。错误不会每次都抛出,我找不到模式。我想我已经在某个地方实现了一些比赛条件。
我的应用程序中的用户流如下:
Error: getToken aborted due to token change.
,交易失败承诺流:
firebase.auth().createUserWithEmailAndPassword(email, password)
.catch(signupError => {
// no problems here
})
.then(() => {
return firebase.auth().signInWithEmailAndPassword(email, password)
})
.catch(loginError => {
// no problem here
})
.then((user) => {
// Database write call which fails (see lower code block)
return this.claimInput.writeClaimedPlace(user.user.uid, claimedPlace);
})
.catch(error => {
// "getToken aborted" ERROR GETS CAUGHT HERE, transaction fails
})
}
数据库事务调用
firestore.runTransaction(function(transaction) {
return transaction.get(usersBusinessRef).then(function(usersBusinesDoc) {
let claimedPlaces = [];
if (usersBusinesDoc.exists && usersBusinesDoc.data().claimedPlaces) {
claimedPlaces = usersBusinesDoc.data().claimedPlaces;
}
claimedPlaces.push(claimedPlace);
return transaction.set(usersBusinessRef, { claimedPlaces }, { merge: true });
});
});
我在Google的任何地方都找不到错误。
我认为错误是由登录时发生的令牌更改引起的。另一方面,我读到Firebase再接受旧令牌。有什么想法吗?
答案 0 :(得分:1)
在调试通过React App连接到Firebase的客户端时,我遇到了类似的错误[错误代码]。
解决方案是
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write: if false;
}
}
}
将以上内容放入Firestore设置的规则部分内,这显然意味着您需要允许读取外部api,但是写入被阻止,并且以前它同时阻止了读取和写入。
如果您尝试从客户端/服务器读取内容,则可能是问题之一
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write;
}
}
}
P.S。我认为有一个firebase-admin
模块,可以通过以单独的方式处理身份验证来帮助进行写操作。我认为该模块更适合写操作,而普通的firebase.firestore(app)
适合读操作。