4

Firebase認証でWeb / JS SDKを使用して(電話番号を使用して)ユーザーを認証し、セキュリティルールを設定してFirestoreドキュメントを(Web SDKも使用して)作成しようとしています。ただし、認証されているにもかかわらず、何らかの理由でリクエスト認証が null であるため、すべてのセキュリティ ルールが失敗します。以下の例では、ID が認証されたユーザーの uid (Firebase によって生成されたもの) と等しいドキュメントを作成しようとしています。この場合の uid はpbc5l8cca7ELtwM0Kxctn9xLeT2i(デバッグ ログに表示されます)。

私のルール:

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /preferences/{userId} {
        allow read, update: if debug(request.auth) != null && debug(request.auth.uid) == userId;
        allow create: if debug(request) && debug(request.auth) != null;
    }

行のデバッグallow createはリクエストを出力していますが、ヘッダーに Bearer トークンがあるのは奇妙なことです (認証されていないときに同じことをしようとすると、これが失われます) が、リクエストの auth 属性は null です。

Apr 16, 2021 6:20:42 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
Apr 16, 2021 6:20:42 PM com.google.net.webchannel.server.common.CorsFilter populateCustomHeaders
WARNING: Invalid $httpHeaders: X-Goog-Api-Client:gl-js/ fire/8.4.1
X-Firebase-GMPID:1:855732088727:web:38fc76872a93ee3e979ed2
Content-Type:text/plain
Authorization:Bearer eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJwaG9uZV9udW1iZXIiOiIrMTEyMjMzMzU1NTUiLCJhdXRoX3RpbWUiOjE2MTg2MTE2MjYsInVzZXJfaWQiOiJwYmM1bDhjY2E3RUx0d00wS3hjdG45eExlVDJpIiwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJwaG9uZSI6WyIrMTEyMjMzMzU1NTUiXX0sInNpZ25faW5fcHJvdmlkZXIiOiJwaG9uZSJ9LCJpYXQiOjE2MTg2MTE2MjYsImV4cCI6MTYxODYxNTIyNiwiYXVkIjoiZWFybmhhdXMtc3RhZ2luZyIsImlzcyI6Im0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS9lYXJuaGF1cy1zdGFnaW5nIiwic3ViIjoicGJjNWw4Y2NhN0VMdHdNMEt4Y3RuOXhMZVQyaSJ9.

Apr 16, 2021 6:20:42 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
Apr 16, 2021 6:20:42 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
map_value {
  fields {
    key: "auth"
    value {
      null_value: NULL_VALUE
    }
  }
  fields {
    key: "headers"
    value {
      map_value {
      }
    }
  }
  fields {
    key: "inTransaction"
    value {
      bool_value: true
    }
  }
  fields {
    key: "method"
    value {
      string_value: "create"
    }
  }
  fields {
    key: "path"
    value {
      path_value {
        segments {
          simple: "databases"
        }
        segments {
          simple: "(default)"
        }
        segments {
          simple: "documents"
        }
        segments {
          simple: "preferences"
        }
        segments {
          simple: "pbc5l8cca7ELtwM0Kxctn9xLeT2i"
        }
      }
    }
  }
  fields {
    key: "readFields"
    value {
      null_value: NULL_VALUE
    }
  }
  fields {
    key: "resource"
    value {
      map_value {
        fields {
          key: "__name__"
          value {
            path_value {
              segments {
                simple: "databases"
              }
              segments {
                simple: "(default)"
              }
              segments {
                simple: "documents"
              }
              segments {
                simple: "preferences"
              }
              segments {
                simple: "pbc5l8cca7ELtwM0Kxctn9xLeT2i"
              }
            }
          }
        }
        fields {
          key: "data"
          value {
            map_value {
              fields {
                key: "paymentMethod"
                value {
                  string_value: "venmo"
                }
              }
              fields {
                key: "paymentRecipient"
                value {
                  string_value: "+11223335555"
                }
              }
            }
          }
        }
        fields {
          key: "id"
          value {
            string_value: "pbc5l8cca7ELtwM0Kxctn9xLeT2i"
          }
        }
      }
    }
  }
  fields {
    key: "time"
    value {
      timestamp_value {
        seconds: 1618611642
        nanos: 877000000
      }
    }
  }
  fields {
    key: "transforms"
    value {
      null_value: NULL_VALUE
    }
  }
  fields {
    key: "writeFields"
    value {
      null_value: NULL_VALUE
    }
  }
}

null_value: NULL_VALUE

Apr 16, 2021 6:20:42 PM com.google.cloud.datastore.emulator.impl.util.WrappedStreamObserver onError
INFO: operation failed: 
false for 'create' @ L7

null であるという事実は、セキュリティ ルールを適用することを不可能にします。私は何を間違っていますか?

4

0 に答える 0