首页 > 解决方案 > 允许用户在 Firestore 规则中首次尝试写入

问题描述

我现在处于一种特殊的情况。我正在实现一个 addFriend 功能。它将用户添加到一个名为“friends”的集合中,该集合包含一个文档 {uid},该文档是一个朋友 {uid} 的数组。

这是我的文档结构:

库奇比

我希望用户只编辑他们的数据,所以我有规则:

function isSignedIn() {
      return request.auth != null;
    }
 function isUser(userId) {
      return request.auth.uid == userId;
    }

match /friends/{userId} {
    allow read:if isSignedIn();
    allow create:if isSignedIn();
    allow update: if isSignedIn() && isUser(userId);

现在安全漏洞正在创建中:任何登录的用户都可以创建,但我应该允许人们创建自己的数据。我可以通过将传入的文档名称与 uid 进行比较来做到这一点,但我不知道该怎么做。

这是我创建或更新朋友集合的代码:

FirebaseFirestore.getInstance().collection(FRIENDS).document(FirebaseAuth.getInstance().getUid())
                    .update("friends", FieldValue.arrayUnion(scorecard.getUid()))
                    .addOnCompleteListener(task -> {
                        if (task.isSuccessful()) ;
                        else {
                            Map<String, Object> m = new HashMap();
                            m.put("friends", FieldValue.arrayUnion(scorecard.getUid()));
                            FirebaseFirestore.getInstance().collection(FRIENDS).document(FirebaseAuth.getInstance().getUid())
                                    .set(m);
                        }
                    });

标签: androidfirebasegoogle-cloud-firestorefirebase-security

解决方案


我想我已经得到了答案,如果您需要检查传入文档的名称,您可以使用规则

request.auth.uid==request.resource.__name__

您可以进一步查看文档


推荐阅读