0

Express/Firebase アプリケーションを数週間開発しています。次の問題が発生するまで、すべて正常に機能していました。

TypeError: firebase.storage is not a function

クイック検索でTypeError: firebase.storage is not a functionにたどり着きました。そこに集められたソリューションを使用して、構成に@google-cloud/storage成功しました。しかし、その後、私は遭遇しました:

Caller does not have storage.objects.create access to bucket example.appspot.com

さらにグーグルで調べた後、firebase-admin ユーザーをhttps://console.cloud.google.com/storage/example.appspot.comのバケットに手動で追加する必要があることがわかりました。

ここに画像の説明を入力

それが完了したら、次のことをテストします。

bucket.upload('./package.json')
  .then((file) => {
    console.log(file)
  })
  .catch((error) => {
    console.log(error)
  })

これは完全に機能します。この問題は、Express アプリを停止して再実行し、再度アップロードしようとするとCaller does not have...エラーが発生します。バケットのアクセス許可を確認すると、以前に追加したユーザーが削除されていることがわかります。

ここに画像の説明を入力

@google-cloud/storageここで何かが欠けているのか、パッケージのバグなのか、それともどこかのバグなのかわかりません。何か案は?

4

1 に答える 1

1

GCS は、各アップロードをまったく新しいオブジェクトと見なします。オブジェクトが既存のオブジェクトと名前を共有している場合、既存のオブジェクトは削除され、ACL を含む新しいオブジェクトのプロパティは古いオブジェクトと関係がなくなります。

これはいくつかの方法で修正できます。最も簡単な方法は、firebase-storage をバケットの「デフォルト オブジェクト ACL」に追加することです。これにより、特に指定がない限り、新しく作成されたすべてのオブジェクトにそのサービス アカウントを含む ACL が設定されます。コマンドラインから、gcloud SDK がインストールされている場合は、次のように実行できます。

gsutil defacl ch -u firebase-storage@system.gserviceaccount.com:O gs://bucketname

もう 1 つのオプションは、アップロードの一部として、またはアップロード直後に ACL を明示的に設定することです。

于 2017-04-18T03:16:35.477 に答える