firebase - Firebase JS 错误:getToken 由于令牌更改而中止
问题描述
我在使用 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 接受旧令牌片刻。有什么想法吗?
解决方案
在调试通过 React 应用程序连接到 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;
}
}
}
- 免责声明: *我不是 firebase 的专家。我不确定这是否会损害您的数据库以由外部 api 编写,因为您正在通过这样做打开您的 Firestore 防火墙
PS有一个firebase-admin
模块,我认为它通过以单独的方式处理身份验证来帮助进行写入。我认为该模块更适合写入,而正常firebase.firestore(app)
用于读取。
推荐阅读
- postgresql - 按行 ID 拆分的并发选择查询与一个查询
- multithreading - 为什么这个 Scala 代码在一个线程中执行两个 Future?
- c# - 是否可以并行下载和解压缩?
- angular - 效果中的动作有效载荷
- python - 如何在列表中存储大量值?
- ruby-on-rails - 如何从Ruby中的数组中随机返回一个元素
- webgl - 无法为 half_float 纹理生成 mipmap
- javascript - 当没有逗号分隔符时将字符串转换为对象
- azure - 有没有办法将 QnA 问题转换为 LUIS 意图表达
- lotus-notes - 如果字段为空且“状态”仍在数据库中,则阻止按钮执行