我在节点服务器上使用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:无起始线
答案 0 :(得分:2)
这里的问题是正在使用的服务帐户没有明确的项目权限来下载用户。
事实证明,只有服务帐户才能解码令牌,但getUser(uid)
等其他操作需要额外的权限
要解决此问题,我必须进入项目权限的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)
});