javascript 遵守Firebase身份验证规则

imzjd6km  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(76)

我正在尝试构建一个简单的Web应用程序,可以将遥测发送到Firestore。每当用户执行一个操作时,我想调用一个函数updateUserWithAction,该函数将数据发送到Firestore,增加/actions/{uid}中的计数。这是我目前得到的:

export const updateUserWithAction = async (user, action) => {                                        
  const userDocRef = doc(db, 'actions', user.uid)                                                    
  await updateDoc(userDocRef, {                                                                      
    action: increment(1)                                                                             
  });                                                                                                
};

这违反了我的安全规则,因为它是在客户端上运行的。然后,我尝试通过提供以下安全规则来授予客户端访问权限:

service cloud.firestore {
  match /databases/{database}/documents {
    match /actions/{uid} {
        allow read, write: if request.auth.uid == uid;
    }

这似乎不起作用,我想我必须以某种方式使用户身份验证过程(即Firebase Auth)对Firestore可见...?或者我必须在updateUserWithAction中的某个地方传递UID吗?这对我来说没有意义,因为看起来像是恶意用户可以发送一个虚构的UID来使自己能够更新任意记录。那么:我应该如何构建我的应用程序,以安全地写入这些记录?

polhcujo

polhcujo1#

如果用户已登录,则根本不需要“传递”任何内容。规则中的request.auth.uid将简单地包含它们的uid。但是我们无法看到它们在您进行查询时是否已登录,也无法看到您代码中user.uid的值以及它是否与用户的UID匹配,因此如果没有显示这些值的特定调试详细信息,我们也无能为力。

相关问题