【发布时间】:2021-10-29 15:00:30
【问题描述】:
我的项目有问题 - Node.js 和 Firebase。
我想添加一个管理员角色,因此我根据文档使用自定义声明。 我在云函数中有 3 个函数:
exports.addAdminRole = functions.https.onCall((data, context) => {
return admin.auth().setCustomUserClaims(context.auth.uid, {
admin: true
}).then(() =>'Success!')
.catch(err => err)
})
exports.getUserRecord = functions.https.onCall((data, context) => {
return admin.auth().getUser(context.auth.uid)
.then(userRecord => userRecord.customClaims)
.catch(err => err)
})
exports.deleteAdmin = functions.https.onCall((data, context) => {
return admin.auth().setCustomUserClaims(context.auth.uid, null)
.then(() => 'Deleted admin!')
.catch(err => err)
})
我直接在客户端调用函数(http 可调用)并且 addAdminRole 返回“成功!”并且似乎有效。 getUserRecord 似乎也能正常工作,并返回 {admin: true} 作为我的自定义声明。
现在解决问题。我定义了一个函数来在客户端获取用户声明,如文档中所述:
getRecords() {
firebaseInstance.auth.currentUser.getIdTokenResult()
.then(idTokenResult => {console.log("ADMIN:", idTokenResult)})
.catch(err => console.error(err))
}
(firebaseInstance 已导入并在整个项目中正常工作)
我不明白为什么,但是客户端的代码返回了一个带有声明属性的对象,但是这个属性没有我在云函数中添加的管理员声明。
如果我尝试访问 idTokenResult.claims.admin 就像在文档中一样,它会记录我 UNDEFINED。
文档链接 - https://firebase.google.com/docs/auth/admin/custom-claims#node.js
你能向我解释一下有什么问题吗? 感谢您的帮助!
【问题讨论】:
标签: node.js firebase firebase-authentication google-cloud-functions google-admin-sdk