2017-11-20 3 views
0

私はトークンをサーバに送りますが、何か問題があります。私はFirebaseシミュレータの権限をテストするために行って、.validate行が間違っていると私に伝えていることを知りました。ここに私のセキュリティルールだFirebaseセキュリティパーミッションは、文字列がisStringの使用中に文字列ではないことを伝えます。

{ 
    "rules":{ 
     "tokens":{ 
     "users":{ 
       "$uid":{ 
        ".read":"auth !== null && auth.uid === $uid", 
        ".validate":"newData.isString()", // wrong here. idk why 
        ".write":"auth !== null && $uid === auth.uid && (!data.exists() || newData.val() !== data.val())" 
       } 
      } 
     } 
    } 
} 

データ構造:以下のように

root 
    |- tokens 
     |- users 
      |- uid:token_value 

私の入力は、次のとおりです。

シミュレーションタイプ:書き込み

場所: /トークン/ユーザー/ hA4hZrBieISwMOZaMYe7m6K5tpI3

データ(JSON):

{ 
    "hA4hZrBieISwMOZaMYe7m6K5tpI3": "hi" 
} 

認証:

プロバイダ: Googleの

UID: hA4hZrBieISwMOZaMYe7m6K5tpI3

問題がデータで"hi"です(JSON )は、文字列でないval ue。なぜどんなアイデア?

答えて

0

あなたは/tokens/users/hA4hZrBieISwMOZaMYe7m6K5tpI3に書いている新しいデータが文字列ではない、それはJSONオブジェクトです:

{ 
    "hA4hZrBieISwMOZaMYe7m6K5tpI3": "hi" 
} 

hA4hZrBieISwMOZaMYe7m6K5tpI3が文字列値であることを検証するには:あなたのための

{ 
    "rules":{ 
     "tokens":{ 
      "users":{ 
       "$uid":{ 
        ".read":"auth !== null && auth.uid === $uid", 
        "$key": { 
        ".validate":"newData.isString()" 
        }, 
        ".write":"auth !== null && $uid === auth.uid && (!data.exists() || newData.val() !== data.val())" 
       } 
      } 
     } 
    } 
} 
+0

こんにちは感謝回答。私はちょっと混乱しているようだ。データ構造は私の質問で提供したものに従いますか?または、uidとトークンを組み合わせて最初のuidの下に別のノードを作成しますか?私は 'users/uid'のように見え、' uid'にはトークンが含まれているからです。私が思っているのは、私が欲しいものを達成するために 'tokens/users /'に設定している場所を改訂することです。それ以降は失われてしまいます。 – CraftedGaming

+1

私はあなたが単純な文字列hi "')を '/ tokens/users/hA4hZrBieISwMOZaMYe7m6K5tpI3'に変更します。その場合、元のルールは正しいですが、問題はJSONオブジェクトを作成しようとしていることです。 –

関連する問題