尝试获取集合时出现Firebase凭证错误

时间:2020-03-01 11:59:44

标签: node.js express google-cloud-firestore firebase-authentication firebase-admin

我正在为我的项目使用带有express的节点。一切工作正常,直到我尝试使用中间件获取收藏。

这是中间件:

const FBAuth = (req, res, next) => {
  let idToken;
  if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
    idToken = req.headers.authorization.split(' ')[1];
  } else {
    return res.status(403).json({ error: 'No Token' });
  }
  admin.auth().verifyIdToken(idToken)
    .then(decodedToken => {
      req.user = decodedToken;
      console.log(decodedToken);

我在控制台上登录了idToken,似乎还可以。 我用控制台记录了encodedToken并得到了这个:

iss: 'https://securetoken.google.com/projectName',
>    aud: 'projectName',
>    auth_time: 1583062225,
>    user_id: 'an ID',
>    sub: 'same as user_id',
>    iat: number...,
>    exp: number...,
>    email: 'testmd@email.com',
>    email_verified: false,
>    firebase: { identities: { email: [Array] }, sign_in_provider: 'password' },
>    uid: 'same as user_id'

但是如果我尝试获取例如“用户”的集合(与firebase中的集合名称相同):

admin.auth().verifyIdToken(idToken)
    .then(decodedToken => {
      req.user = decodedToken;
      console.log(decodedToken);
      return db.collection("users")
       .where('email', '==', req.user.email)
       .limit(1)
       .get()
    })
     .then(data => {
       res.json(data)
     })

无论我尝试获取什么集合或如何总是收到此错误:

UnhandledPromiseRejectionWarning:错误:无法加载默认凭据。浏览至https://cloud.google.com/docs/authentication/getting-started了解更多信息...

因此,我阅读了有关凭据的信息,我将其添加为:

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

const config = {
...more configs
atabaseURL: "https://...",
credential: admin.credential.cert(serviceAccount),
projectId: "projecId",
...more config
}

firebase.initializeApp(config)

在serviceAccountKey.json中,我有在帐户服务标签中生成的从firebase获得的密钥。

添加凭据后仍然出现与上述相同的错误。

1 个答案:

答案 0 :(得分:1)

您显示的代码称为:

firebase.initializeApp(config)

但是我们不知道firebase是什么。我很确定这不是Firebase Admin SDK。我怀疑您应该使用admin变量来初始化Admin SDK,该变量用于在exprss应用程序中查询数据库:

admin.initializeApp(config)