2017-01-25 6 views
2

サーバベースでfirebase-adminを使用している間に、ユーザデータをfirebase認証から取得する必要があります。 しかし、私はfirebaseが提供するjwtトークンを使用すると、 デコードトークンから電子メールや他のプロバイダのデータを取得できないことがわかりました。 (適切なスコープを正しく追加していることを確認してください)`getUser`を呼び出している間にfirebase-admin認証エラーが起きましたが、verifyTokenを呼び出すときに正常に動作します

firebaseの認証からユーザーデータを取得するためにfirebase admin apiを使用しました。

次のようなコードを見て:その後、私はエラーを得た

import * as admin from 'firebase-admin' 

const auth = admin.auth() 
auth.verifyIdToken(idToken) 
    .then(decodedToken => decodedToken.user_id) 
    .then(uid => { 
    auth.getUser(user_id) 
     .then((userRecord) => { 
     console.log("Successfully fetched user data:", userRecord.json(); 
     }) 
     .catch(function(error) { 
     console.log("Error fetching user data:", error); 
     }); 
    }) 

Error fetching user data: Error: error:0906D06C:PEM routines:PEM_read_bio:no start line 
    at Error (native) 
    at Sign.sign (crypto.js:283:26) 
    at Object.sign (~/app/node_modules/jwa/index.js:55:45) 
    at Object.jwsSign [as sign] (~/app/node_modules/jws/lib/sign-stream.js:23:24) 
    at Object.module.exports [as sign] (~/app/node_modules/firebase-admin/node_modules/jsonwebtoken/sign.js:144:16) 
    at CertCredential.createAuthJwt_ (~/app/node_modules/firebase-admin/lib/auth/credential.js:190:20) 
    at CertCredential.getAccessToken (~/app/node_modules/firebase-admin/lib/auth/credential.js:162:26) 
    at SignedApiRequestHandler.sendRequest (~/app/node_modules/firebase-admin/lib/utils/api-request.js:110:32) 
    at ~/app/node_modules/firebase-admin/lib/auth/auth-api-request.js:381:50 
    at process._tickDomainCallback (internal/process/next_tick.js:129:7) 

これは、アクセス権のエラーかもしれないが、この推測によると、私はこれがあるかもしれない を見つけましたstackoverflowでこの問題に関連する:

Firebase admin().auth().getUser(uid) Error: An internal error has occurred 'auth/internal-error' でもadminクライアントのIAMをrole:editorに変更しても、 このエラーはまだ発生しています。 何が起きているのか、 、なぜadminがトークンを確認できるのですが、私のプロジェクトにサービスアカウントのルートアクセス権を与えても、ユーザーデータを読み込む権限を与えることができます。

私にはどんな提案も役に立ちます。

+0

あなたが提供したコードサンプルには、再現が困難な一連の構文とコードエラーがあります。たとえば、initializeApp()を呼び出すことはありません。また、未定義の 'idtoken'と' user_id'変数も使用します。最後に、最初の 'console.log()'行に閉じ括弧がありません。私たちがこれをデバッグするのを助けるためにあなたは完全なreproをまとめてください。最も簡単に問題を解決する方法については、下記の私の回答を参照してください。それでも問題が解決しない場合は、新しいエラー処理が含まれている最新バージョンのSDK(4.0.6)にアップグレードしてください。また、無効なキーファイルがどこにあるかを知ることは素晴らしいことです。 – jwngr

答えて

1

私の最善の策は、あなたが使用しているサービスアカウントキーファイル内の秘密鍵が無効であることです。有効なサービスアカウントキーファイルを取得するには、Add Firebase to your appの指示に従ってください。あなたのプロジェクトに必要なすべての権限を持つ新しいJSONファイルを生成するのに使うことができるいいUIがあります。これを使用してSDKを初期化することができます:

var serviceAccount = require("path/to/serviceAccountKey.json"); 

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount) 
}); 
関連する問題