我有这种情况,我们有一个用户访问另一个用户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; ?
答案 0 :(得分:1)
所以听起来你想要这个结构:
followers
<uid>
<follower_uid>: true
并且您希望仅允许follower_uid
的用户写入值。
这可以通过以下安全规则来完成。
{
"rules": {
"followers": {
"$uid": {
"$follower_uid": {
".write": "auth.uid == $follower_uid"
}
}
}
}
}
我建议您阅读Firebase documentation on security rules,其中涵盖了这个以及更多场景。这是一个阅读,但值得花时间。