2016-11-16 22 views
1

我是一个节点服务器火力地堡管理员()AUTH()的getUser(UID)错误:发生内部错误“认证/内部 - 错误”

初始化管理应用程序使用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失败

{ [Error: An internal error has occurred.] errorInfo: { code: 'auth/internal-error', message: 'An internal error has occurred.' } }


当我试图通过在凭证其他推荐的方式,我得到这个:

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失败

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line

回答

2

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

事实证明,单独的服务帐户是所有需要的凭证进行解码,但额外的权限是必需的其他操作,如getUser(uid)

为了解决这个问题,我不得不进入IAM节上的权限该项目并添加具有适当权限的服务器帐户的电子邮件地址(我做过编辑器)。

步骤

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

这救了我的屁股! – dylanjha

+0

你分配了什么角色?我遇到同样的错误,但我的服务帐户电子邮件地址已经有角色编辑器 - 我更改为所有者,但仍然无法使用。 – django09

-1

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

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

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