firebase-admin auth错误,同时调用`getUser`,但在调用verifyToken时工作正常

在服务器端使用firebase-admin时,我需要从Firebase身份validation中获取用户数据。 但是我发现,如果我使用firebase提供的jwt令牌,我无法从解码令牌获取电子邮件或其他提供者的数据。 (很确定我已经正确添加了特定的作用域。)

然后我转向使用Firebase的pipe理API来从Firebase的身份validation获取用户数据。

代码如下所示:

 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) 

这可能是一个权限错误,根据这个猜测,我发现这可能与这个问题在计算器上有关:

Firebase admin()。auth()。getUser(uid)错误:发生内部错误'auth / internal-error'

但即使我将pipe理客户端的IAM更改为role:editor,这个错误仍然发生。 想知道发生了什么,以及为什么pipe理员可以validation令牌,但可以被授予阅读用户数据(即使我给服务帐户根访问我的项目)。

任何build议对我都有帮助。

我最好的办法是什么是错误的是您使用的服务帐户密钥文件中的私钥是无效的。 要获取有效的服务帐户密钥文件,请按照将Firebase添加到您的应用中的说明操作。 有一个很好的用户界面,你可以使用它来生成一个新的JSON文件,它应该有你的项目的所有适当的权限。 你可以使用它来像这样初始化你的SDK:

 var serviceAccount = require("path/to/serviceAccountKey.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });