如何避免用户在Firebase中编写特定信息?

时间:2016-10-04 08:28:49

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

我有这种情况,我们有一个用户访问另一个用户B的个人资料,他点击了关注。一旦他关注用户B,我们希望他写信给Firebase并添加到用户B的关注者:{userA:true} ...查看规则我明白我们可以对用户进行身份验证,但是一旦他通过身份验证我们如何确定他只能向userB的关注者写他的userId - 作为userA而不篡改数据并且可能写userC。

身份验证是否给了我们userA,我们可以确保write只能等于userId的auth.userA,还是随机生成的,与我们一般用户使用的主userId不一样?

另外,如果可以从他们的文档访问auth.userId,我们还可以调用auth.username来获取经过身份验证的用户名,以确保他们不会在用户名之外写一些东西吗?

以下是数据结构的示例:

以下    用户名    用户身份    日期

我试图让用户只能将他们的userId和用户名写入以下内容。

Map<String, Object> payload = new HashMap<String, Object>();
payload.put("uid", "uniqueId1");
payload.put("some", "arbitrary");
payload.put("data", "here");
TokenGenerator tokenGenerator = new TokenGenerator("<YOUR_FIREBASE_SECRET>");
String token = tokenGenerator.createToken(payload);

是否必须是&#34;数据&#34;或者它可以是&#34;用户名&#34;,&#34;测试员&#34; ?

1 个答案:

答案 0 :(得分:1)

所以听起来你想要这个结构:

followers
   <uid>
     <follower_uid>: true

并且您希望仅允许follower_uid的用户写入值。

这可以通过以下安全规则来完成。

{
  "rules": {
    "followers": {
      "$uid": {
        "$follower_uid": {
          ".write": "auth.uid == $follower_uid"
        }
      }
    }
  }
}

我建议您阅读Firebase documentation on security rules,其中涵盖了这个以及更多场景。这是一个阅读,但值得花时间。