2

私は匿名認証を使用してFirebaseを使用している公開入力タイプのアプリを持っています。ユーザーデータは、マップ上にポイントを作成するために使用されます。各匿名ユーザーは、セキュリティルールを使用して、自分の認証IDと一致するノード内のデータのみを編集できます。匿名認証を使用してFirebaseデータベース構造を保証するにはどうすればよいですか?

ただし、私のアプリは特定のデータベース構造に依存しています。データベースURLはクライアント側で読み取り可能なので、匿名認証を使用してデータベース構造/整合性を保証するにはどうすればよいですか?

セキュリティと検証のルールでは可能だと思いますが、わかりません。おそらく、ノードの子供の創造を否定するでしょうか?これは、スキーマが確実に実行されるために必要です。

各認証ノードには多くの鍵ノードがありますが、このFirebase側を制限したいと考えています。そして、各キーノードは以下のスキーマに従わなければなりません(私はgeojsonを簡単に引き出すことができます)。以下は私の現在のセットアップです - 何が欠けているのだろうか?

"features" : { 
    "5AGxfaK2q8hjJsmsO3PUxUs09Sz1" : { 
     "-KS3R4sWPdcDkrxyIFX6" : { 
     "geometry" : { 
      "coordinates" : [ -81.88247680664062, 38.884619201291905 ], 
      "type" : "Point" 
     }, 
     "properties" : { 
      "color" : "#2be", 
      "title" : "" 
     }, 
     "type" : "Feature" 
     }, 

firebase rules

+0

ボルトコンパイラが役に立ちます。これにより、タイプを定義したり、セキュリティー・ルールを使用してスキーマを定義するのを簡単にすることができます。 See:https://github.com/firebase/bolt – cartant

+0

あなたの質問にJSONツリーの画像が含まれています。 Firebaseデータベースコンソールの[エクスポート]ボタンをクリックすると、実際のJSONをテキストとして置き換えてください。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

+0

写真ははるかに読みやすく、実際のデータを含めることができます。私はすぐに更新します。 – malcolm

答えて

1

認証およびデータベーススキーマは、完全に別個のトピックです。認証プロバイダ(つまり、匿名認証)とは関係なく、セキュリティ文書の.write.validateの組み合わせを使用してデータベーススキーマを保証します。

これについては、database security guideに詳しく説明されています。

簡単な要約:

  • hasChildren:指定必須フィールド
  • newData
  • data
  • を書き込まれるデータを参照してください。すでにデータベース
  • .validate内のデータを参照:指定データスキーマnewData.isString()またはnewData.val() == data.val() + 1
などを使用して3210

.validateルールはnull以外の値に対してのみ実行されることに注意してください。したがって、!data.exists()のようなものを試してみたい場合(つまり、このパスに一度しか書き込めず、あとで変更することはできません)、またはnewData.exists()(このデータを削除することはできません)の場合は、.writeルール。

詳細については、ガイドを参照してください。

+0

ログインタイプ認証を使用すると、Oauthリダイレクトドメインがありますが、古いFirebaseドキュメントからは匿名認証が含まれていないようです。あなたはSSLドメインが偽装される可能性があると主張することができますが、Oathリダイレクトドメインが使用されている場合、ルールをクライアント側にjavascriptで割り当てることはできますか? – malcolm

+0

セキュリティルールは、クライアントではなくサーバーで管理されます。 – Kato

+0

hasChildrenは、newDataに指定された子よりも多くの子がある場合はfalseを返しますか?または、上記のように "$ other":{"validate": "false"}を使用する必要がありますか? – malcolm

関連する問題