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

时间:2016-11-16 18:47:30

标签: firebase firebase-authentication json-web-token

我在节点服务器上使用firebase-admin

初始化管理应用程序正常工作:

const admin = require('firebase-admin')
const serviceAccount = require('../service-account.json')
admin.initializeApp({                                                                                             
  credential: admin.credential.cert(serviceAccount),
  databaseURL: // firebaseio.com url
})

admin.auth().verifyIdToken(token).then((decoded) => {
  // THIS WORKS SUCCESS! a decoded token
  console.log('decoded', decoded)
  // now look up the user information
  admin.auth().getUser(decoded.uid).then((userRecord) => {
    console.log('got user record', userRecord)
  }).catch((err) => {
    // { [Error: An internal error has occurred.]
    //     errorInfo: 
    //      { code: 'auth/internal-error',
    //         message: 'An internal error has occurred.' } }
    console.error(err)
  })
})

getUser的最后一部分失败

  

{[错误:发生了内部错误。]     errorInfo中:      {code:' auth / internal-error',        消息:'发生内部错误。' }}

当我尝试以其他推荐的方式传递凭据时,我得到了这个:

const admin = require('firebase-admin')
admin.initializeApp({                                                                                             
  credential: admin.credential.cert({
    projectId: //projectid,
    clientEmail: //client email,
    privateKey: //admin private key
  }),
  databaseURL: // firebaseio.com url
})

然后,当我尝试验证并查找用户时:

admin.auth().verifyIdToken(token).then((decoded) => {
  // THIS WORKS SUCCESS! a decoded token
  console.log('decoded', decoded)
  // now look up the user information
  admin.auth().getUser(decoded.uid).then((userRecord) => {
    console.log('got user record', userRecord)
  }).catch((err) => {
    // Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    console.error(err)
  })
})

getUser的最后一部分失败

  

错误:错误:0906D06C:PEM例程:PEM_read_bio:无起始线

2 个答案:

答案 0 :(得分:2)

这里的问题是正在使用的服务帐户没有明确的项目权限来下载用户。

事实证明,只有服务帐户才能解码令牌,但getUser(uid)等其他操作需要额外的权限

要解决此问题,我必须进入项目权限的IAM部分,并使用适当的权限添加服务器帐户的电子邮件地址(我做了编辑器)。

步骤

  • 设置图标 - >权限
  • IAM
  • +添加用户图标
  • 输入服务帐户凭据的电子邮件地址并指定角色

答案 1 :(得分:0)

生成有效服务帐户密钥文件的最简单方法是按照Add Firebase to your app中的说明操作。有一个很好的UI,您可以使用它来生成一个新的JSON文件,该文件应具有项目的所有适当权限。然后,您可以使用它来初始化Admin Node.js SDK,如下所示:

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

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