1

セキュリティ ルールの適切な設定、特に投稿データの読み取りに問題があります。

データ階層は次のようになります。

posts : {
    0 : {
        title: "Post One",
        userId: 6
    }
},
users : {
    6 : {
        name: "My Name"
    }
}

そして、私のルールは次のとおりです。

{
  "rules": {
    "posts" : {
      "$post": {
         ".read":"data.child('userId').val() == auth.id",
         ".write":"newData.child('userId').val() == auth.id"
      }
    },
    "users":{
      "$user": {
        ".read":"auth.id == $user",
        ".write":"auth.id == $user"
      }
    }
  }
}

「auth.id」が6であることはわかっています。これは、ユーザー情報のルールが正しくプルされているためです。番号を静的にプルするようにルールを変更すると、次のように機能します。

      "$post": {
         ".read":"data.child('userId').val() == 6",
         ".write":"newData.child('userId').val() == auth.id"
      }

しかし、auth.id を使用することはできません。足りないものはありますか?

4

2 に答える 2

5

覚えておくべきことの 1 つは、セキュリティ ルールはタイプ セーフであるということです。特に、ルールでは、"6" != 6 (1 つは文字列で 1 つは数値であるため)。おそらくあなたの auth.id は "6" (文字列として) ですが、あなたの userId は数字として 6 ですか?

その場合、考えられる修正の 1 つは、ルール式を次のように変更することです。

data.child('userId').val() + '' == auth.id

これにより、userId が強制的に文字列になります。または、データを変更して、userId が常に文字列として保存されるようにすることもできます。

于 2013-06-20T19:45:38.940 に答える
0

このデータを検索するために使用しているコード (おそらくエラーの場所) または受け取ったエラーが含まれていません。それらはかなり役立ちます。

一度に 1 つの投稿を読もうとしており、認証が正しく設定されていると仮定すると、ルールは正常に機能するはずです。

簡単に推測すると、「投稿」パス全体を読み取ろうとしており、セキュリティ ルールを使用して投稿をフィルター処理していると思われます。しかし、セキュリティ ルールは基本的にアトミックです。「投稿」を読み取ろうとして、投稿の 1 つに読み取りを禁止するルールがある場合、操作全体が失敗します。

代わりに、認証されたユーザーがすべてのデータを読み取ることができるパスに投稿をセグメント化する必要があり、それに応じてセキュリティ ルールを適用できます。

非常に役立つことの 1 つは、Forge に入り、「シミュレーター」を使用して、セキュリティ ルールをテストすることです。任意のユーザーとしてログインし、読み取り/書き込みを試行して、失敗したセキュリティ ルールとその理由を正確に確認できます。

于 2013-06-20T19:05:19.233 に答える