2017-01-25 5 views
2

Bei der Verwendung firebase-admin auf der Serverseite, Ich brauche Benutzerdaten von der Firebase-Authentifizierung. Aber ich habe festgestellt, dass, wenn ich jwt-Token verwenden, die Firebase zur Verfügung gestellt, konnte ich nicht E-Mail oder andere Anbieter Daten von der Decodierung Token. (ziemlich sicher, dass ich bestimmte Bereiche richtig hinzugefügt habe.)firebase-admin auth Fehler beim Aufruf von `getUser`, funktioniert aber beim Aufruf von verifyToken

Dann wandte ich mich an Firebase Admin API, um Benutzerdaten von Firebase-Authentifizierung zu erhalten.

Der Code sieht wie folgt aus:

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); 
     }); 
    }) 

Dann habe ich einen Fehler bekam:

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) 

Dies könnte ein Berechtigungsfehler sein, nach dieser Vermutung, habe ich festgestellt das sein könnte im Zusammenhang mit diesem Problem auf Stackoverflow:

Firebase admin().auth().getUser(uid) Error: An internal error has occurred 'auth/internal-error'

Aber selbst ich ändere die IAM von Admin-Client in Rolle: Editor, dieser Fehler ist immer noch aufgetreten. Fragen, was los ist, und warum Admin Token überprüfen kann aber gewährt werden, um Benutzerdaten zu lesen (auch ich gebe dem Dienstkonto Root-Zugriff auf mein Projekt).

Jeder Vorschlag wäre hilfreich für mich.

+0

Das von Ihnen bereitgestellte Codebeispiel hat eine Reihe von Syntax- und Codefehlern, die es mir schwer machen, Repro. Zum Beispiel rufen Sie nie initializeApp() auf. Sie verwenden auch undefinierte 'idtoken' und' user_id' Variablen. Schließlich fehlt in Ihrer ersten Zeile "console.log()" eine schließende Klammer. Kannst du bitte eine vollständige Repro erstellen, um uns dabei zu helfen, dies zu debuggen? Im Folgenden finden Sie Antworten auf die Frage, wie Sie Ihr Problem am besten lösen können. Wenn dies nicht funktioniert, führen Sie ein Upgrade auf die neueste Version des SDK (4.0.6) mit einer neuen Fehlerbehandlung durch. Außerdem wäre es gut zu wissen, wo Sie die ungültige Schlüsseldatei erhalten haben. – jwngr

Antwort

1

Meine beste Wette, was schief geht ist, dass der private Schlüssel in der Service-Account-Schlüsseldatei, die Sie verwenden, ungültig ist. Folgen Sie den Anweisungen in Add Firebase to your app, um eine gültige Dienstkonto Schlüsseldatei zu erhalten. Es gibt eine nette Benutzeroberfläche, mit der Sie eine neue JSON-Datei erstellen können, die alle erforderlichen Berechtigungen für Ihr Projekt haben sollte. Sie können es verwenden, um Ihr SDK wie folgt zu initialisieren:

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

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount) 
}); 
Verwandte Themen