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

また、最初に null チェックを行います。

そう:

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