0

我有这种情况下,我们有一个用户A访问另一个用户B的配置文件,他点击按钮。一旦他跟随用户B,我们希望他写信给Firebase并添加到userB的追随者:{userA:true} ...查看规则我了解我们可以对用户进行身份验证,但是如何确保一旦通过身份验证,写信给userB的追随者只有他的userId - 作为userA而不会篡改数据并可能写入userC。如何避免用户在Firebase中撰写特定信息?

身份验证是否给我们userA,我们可以确保写入只能与userId的auth.userA相等,或者是随机生成的,而不是与我们通常为用户使用的主要userId相同?

此外,如果可以从他们的文档访问auth.userId,我们也可以调用auth.username来获取经过身份验证的用户名,以确保他们不会在用户名之外写入某些字符?

下面是数据结构的例子:

以下 用户名 用户ID 日期

我试图让用户只能够他们的帐户及用户名写入以下。

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); 

它必须是“数据”还是可以是“用户名”,“测试仪”?

+0

下面的答案。对于下一个问题:如果在问题中包含的不仅仅是数据结构的描述,还会更快地得到答案。例如:我们大多数人发现我的数据结构中的小图比扫描数据结构的描述更快。 –

回答

1

所以,它听起来就像你想有这样的结构:

followers 
    <uid> 
    <follower_uid>: true 

而且要允许只follower_uid用户编写的价值。

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

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

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

+0

谢谢弗兰克,虽然我设置了自己的额外auth方法,但是我为这个例子添加了一些代码,我可以像这样运行它,对于payload.put(“username”,“testuser”)然后调用auth.username检查? – Lion789

相关问题