【问题标题】:How to avoid a user from writing specific info in Firebase?如何避免用户在 Firebase 中写入特定信息?
【发布时间】:2016-10-04 08:28:48
【问题描述】:

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

身份验证是否为我们提供了 userA,我们可以确保写入只能等于 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);

必须是“数据”还是可以是“用户名”、“测试人员”?

【问题讨论】:

  • 在下面回答。对于下一个问题:如果您在问题中包含的不仅仅是对数据结构的描述,您会发现获得答案的速度更快。例如:我们大多数人发现我在您的数据结构上的小图比对该数据结构的描述更快。

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


【解决方案1】:

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

followers
   <uid>
     <follower_uid>: true

并且您希望只允许具有follower_uid 的用户写入值。

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

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

我建议您阅读Firebase documentation on security rules,它涵盖了这个以及更多的场景。读起来有点难,但值得花时间。

【讨论】:

  • 感谢弗兰克,尽管我设置了我自己的额外身份验证方法,但我在上面添加了一些代码作为示例,我可以这样运行它吗,对于 payload.put("username", "testuser")然后调用 auth.username 进行检查?
猜你喜欢
  • 2021-03-28
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
相关资源
最近更新 更多