没有uid的Firebase参考

时间:2018-02-09 02:19:32

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

我正在尝试创建对我的firebase数据库的引用并发送user.uid,但不写入数据库中的该路径。这可能吗?

var dbObj = firebase.database().ref().child(`match/${user.uid}/${randomID}`);
var milliseconds = (new Date).getTime();
return dbObj.update({
    // Set the interested value in the db
    [milliseconds]: 'text'
});

所以我使用user.uid来验证用户是否通过firebase数据库规则登录了有效。我将它与$ uid相匹配,这是有效的。

"match": {
  "$uid": {
    ".write": "auth.uid == $uid",
    ".read": "auth.uid == $uid",
  }
}

但我想写入../match/randomID/otherData INSTEAD ../match/userID/randomID/otherData的数据库位置

1 个答案:

答案 0 :(得分:0)

是的,可以创建对Firebase数据库的引用并发送user.uid,而无需写入该路径。

例如,您有一个spaceships路径,其中子键是太空船ID,值是shapeship对象(可能包含权重,成本,launch_date和creator_id等键,这是该太空船的创作者的用户ID)

您的规则可能如下所示:

{
  "rules": {
    "spaceships": {
      "$spaceship_id": {
        // everyone can retrieve the data here
        ".read": true,
        // only the creator can edit this spaceship
        ".write": "data.child('creator_id').val() === $auth.uid"
      }
    }
  }
}

在这种情况下,无论谁登录都无法确定谁可以阅读宇宙飞船对象(因为任何人都可以)。 uid值仍用于确定谁可以写入该路径(基于creator_id子键),但 包含在您正在检查的路径中{{1} }。