【问题标题】:Firebase transaction fails; simulator set runs just fineFirebase 交易失败;模拟器组运行得很好
【发布时间】:2018-12-31 15:00:35
【问题描述】:

所以我已经为这个问题挠头 2 天了。 我对数据库中的级别进行了以下设置:

"PublishedLevels": {
    "$levelid": {
        "private": {
          ..list of vars
        },
        "public": {
          playCount: 0,
        }

    },
}

现在我正在尝试在 playCount 上执行交易,但我不断收到“permission_denied”。但是,当我通过一组在模拟器中运行它时,它工作得很好。

我正在使用以下代码进行交易:

var playCountRef = firebase.database().ref(`/PublishedLevels/${levelData.uid}/public/playCount`);
playCountRef.transaction(count => {
    console.log(count);
    if (count === null) {
        return count = 0;
    } else {
        return count+1;
    }
});

PublishedLevels设置的规则是:

"PublishedLevels": {
    ".indexOn": "private/creationDate",
    ".write": "auth != null",
    ".read": true,
  }

期待朝着正确的方向轻推!

提前致谢,

埃里克

*update1 帖子现在包含所有规则

*update2 即使从 PublishedLevels 中删除所有验证规则,我仍然遇到以下问题:

【问题讨论】:

  • 请编辑问题以显示完整的规则,而不仅仅是读/写部分。据我们所知,他们实际上可能在错误的位置。还要验证 levelData.uid 是否包含您所期望的内容。
  • 嗨@DougStevenson,我刚刚编辑了我的帖子。我确定 levelData.uid 是正确的。提前感谢您的帮助。
  • @DougStevenson 你知道这里发生了什么吗?

标签: javascript firebase firebase-realtime-database firebase-security


【解决方案1】:

好的,我想通了,显然我搞砸了我的自动登录流程。完成此交易的那一刻,用户尚未登录。我确信这不可能,所以我忽略了那部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2021-05-11
    • 2014-04-09
    • 1970-01-01
    • 2019-02-28
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多