0

我对 Firebase 很陌生,但我的安全规则有问题。我有一个注册或登录新用户的 android 客户端。在该用户第一次登录时,我将他们的数据保存到 firebase,如下所示:

public void onAuthenticated(AuthData authData) {
                //Save user data to firebase
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("provider", authData.getProvider());
                ref.child("users").child(authData.getUid()).updateChildren(map);
}

(验证用户时在 onAuthenticated() 中调用)

但是,似乎我的安全规则不允许用户写入数据库,除非他们的数据已经存储。我的规则如下:

{
"rules": {
   "users":{
      "$userid": {
        ".read": "auth.id == $userid && auth !== null",
        ".write": "auth.id == $userid && auth !== null"
      }
    }
  }
}

此外,如果重要的话,这里有一个数据实际存储时的样子的示例: 一个例子

一旦客户端通过服务器身份验证,我应该如何修改我的规则以允许客户端写入用户数据?

编辑:经过一些测试,这些规则似乎不允许用户向他们的用户节点写入任何内容,即使它已经存在。

4

1 回答 1

6

您的规则中有错字您有:

    ".write": "auth.id == $userid && auth !== null"

应该是auth.uid,不是auth.id

我也会先做空检查。

所以:

    ".write": "auth !== null && auth.uid == $userid"
于 2014-11-05T15:33:09.420 回答