node.js - 调用 `getUser` 时发生 firebase-admin auth 错误,但调用 verifyToken 时工作正常

标签 node.js firebase-authentication firebase-admin

在服务器端使用 firebase-admin 时, 我需要从 firebase 身份验证获取用户数据。 但我发现如果我使用firebase提供的jwt token, 我无法从解码 token 中获取电子邮件或其他提供商的数据。 (非常确定我已经正确添加了特定范围。)

然后我转而使用 Firebase 管理 api 从 Firebase 的身份验证中获取用户数据。

代码如下所示:

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'

但即使我将管理客户端的 IAM 更改为角色:编辑器, 这个错误还是发生了。 想知道发生了什么事, 以及为什么管理员可以验证 token ,但可以被授予读取用户数据的权限(即使我授予服务帐户根访问我的项目的权限)。

任何建议都会对我有帮助。

最佳答案

对于问题所在,我最好的猜测是您正在使用的服务帐户 key 文件中的私钥无效。要获取有效的服务帐户 key 文件,请按照Add Firebase to your app中的说明进行操作。 。有一个很好的 UI,您可以使用它来生成一个新的 JSON 文件,该文件应该具有您的项目的所有适当权限。您可以使用它来初始化您的 SDK,如下所示:

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

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

关于node.js - 调用 `getUser` 时发生 firebase-admin auth 错误,但调用 verifyToken 时工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849143/

相关文章:

node.js - ForestAdmin:解锁您的数据。 CORS配置问题

javascript - node.js - XMLHttpRequest,获取header信息

firebase - 在 Firebase 电话身份验证中什么算作验证?

node.js - 无法使用 Admin SDK Firebase 获取用户列表

javascript - 如何通过 HTTPS 将 Firebase token 发送到后端(Node/Express)

node.js - npm adduser 用户名或密码不正确

node.js - Express 中间件包装响应

php - 适用于 PHP 的 Firebase Admin SDK 是隐藏 Firebase 凭据的有效方法吗?

java - Firebase 身份验证失败

java - 错误 : Program type already present: com. google.firebase.auth.FirebaseAuthException