から行くためにFirebase管理SDKを使用して、私はAppEngineの上でそれを実行しているこの問題に出くわしました:はAppEngineの書き込み中/ firebase IDトークン(JWT)を確認したいバックエンドを行くAppEngineの
http.DefaultTransport and http.DefaultClient are not available in App Engine. See https://cloud.google.com/appengine/docs/go/urlfetch/
管理SDKですここで説明:https://firebase.google.com/docs/admin/setup
次はclient.ksはLIBを使用してエクスポート財産だったので、アプリからの書き込み可能な場合にのみ、それを修正することがあります
client, err := app.Auth()
if err != nil {
log.Errorf(ctx, "Error getting auth client: %v", err)
writeJsonResponse(ctx, w, apiResponse{Message: "Firebase error"},
http.StatusInternalServerError)
return
}
// Override the HTTP client by using the urlfetch client to
// make it work under AppEngine
client.ks.HTTPClient = urlfetch.Client(ctx)
私のオプションはa)これをフォークし、urlfetchのサポートを手作業で追加するb)一見公式のもの以外の解決策を探している:o
EDIT:Gavinの提案通り、私は次のように変更しようとしました:
// Override the default HTTP client with AppEngine's urlfetch
opt := option.WithHTTPClient(urlfetch.Client(ctx))
app, err := firebase.NewApp(ctx, nil, opt)
if err != nil {
log.Errorf(ctx, "Error initializing firebase app: %v", err)
writeJsonResponse(ctx, w, apiResponse{Message: "Firebase error"},
http.StatusInternalServerError)
return
}
これはトリックを行いません。私の知る限り(とライブラリ"firebase.google.com/go"
にいくつかのソースダイビングをした)見ることができるように、http.Clientはoptions.Clientを通じて渡されただけcredsを作成するために使用されます。
creds, err := transport.Creds(ctx, o...)
そして行われ、実際のHTTP通信in method refreshKeys()
のcrypto.go
はこれを使用しません。代わりに、httpKeySource
で設定されたHTTPClientプロパティを使用しようとします。 IMOこれは決してどこにも設定されないので、常にデフォルトでhttp.DefaultClient
になります。
ありがとうございました。ただし、ライブラリは、このhttp.ClientをキーサーバーとのHTTP通信に使用するようには見えません。私の編集を見てください。ライブラリの不具合や監視? – Matti
良いキャッチ。 Admin SDKは現在、公開鍵証明書を取得するときに 'http.DefaultClient'を使用します。これは、アプリケーションを初期化するときに渡されるクライアントオプションを使用するために修正する必要があります。 –
https://github.com/firebase/firebase-admin-go/pull/12に開発中の修正があります。 hkj-http-clientブランチに対してビルドすることで試してみることができます。どんなフィードバックも高く評価されます。 –