【发布时间】:2018-09-26 08:53:24
【问题描述】:
我在使用 JavaScript 库运行 Firestore 事务时收到 Firebase 错误“错误:getToken aborted due to token change”。错误不会每次都抛出,我找不到模式。我想我已经在某处实现了一些竞争条件。
我的应用中的用户流程是这样的:
- 注册一个新帐户并以相同的形式提交一个额外的字符串
- 注册后使用相同的凭据登录用户
- 登录后,获取该附加字符串并将其保存到 Firestore(在事务中)。
- 由于
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 });
});
});
我在谷歌的任何地方都找不到错误。
我认为该错误是由登录时发生的令牌更改引起的。另一方面,我读到 Firebase 会再接受旧令牌。有什么想法吗?
【问题讨论】:
-
这也发生在我身上(android)。我检查了已经登录的当前用户,但是当我运行事务时,由于类似的错误而失败。当前的解决方法是手动获取数据然后更新。
标签: firebase firebase-authentication google-cloud-firestore