0

から行くために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になります。

答えて

1

Firebase Admin SDKを使用して新しいアプリケーションを作成する場合は、「google.golang.org/api/option」パッケージからオプションを渡すことができます。渡すオプションはWithHTTPClientです。

func handleRequest(w http.ResponseWriter, r *http.Request) { 
    ctx := appengine.NewContext(r) 
    opt := option.WithHTTPClient(urlfetch.Client(ctx)) 
    app, err := firebase.NewApp(ctx, config, opt) 
    ... 
} 
+0

ありがとうございました。ただし、ライブラリは、このhttp.ClientをキーサーバーとのHTTP通信に使用するようには見えません。私の編集を見てください。ライブラリの不具合や監視? – Matti

+0

良いキャッチ。 Admin SDKは現在、公開鍵証明書を取得するときに 'http.DefaultClient'を使用します。これは、アプリケーションを初期化するときに渡されるクライアントオプションを使用するために修正する必要があります。 –

+0

https://github.com/firebase/firebase-admin-go/pull/12に開発中の修正があります。 hkj-http-clientブランチに対してビルドすることで試してみることができます。どんなフィードバックも高く評価されます。 –

関連する問題