首页 > 解决方案 > Firebase setCustomUserClaims 总是覆盖旧的

问题描述

在firebase中,我希望使用自定义用户声明来设置用户角色,以及用户能够访问的模块。

如果用户是管理员,自定义声明将是:

{isAdmin: true}

然后现在我授予管理员能够访问用户模块的权限,在我的云功能代码中:

exports.grantUserAccess = functions.https.onCall((data)=> {
  return firebase.auth().setCustomUserClaims(data.uid, {
    hasUserModule: true
  }).then(() => {
    return 'complete'
  })
})

所以我期望的是:

{isAdmin: true, hasUserModule: true}

isAdmin: undefined但是当我打印出用户声明时,似乎hasUserModule: true它基本上覆盖了旧的声明,这是为什么呢?

标签: node.jsfirebasefirebase-authenticationgoogle-cloud-functions

解决方案


根据有关自定义声明的文档

注意:此操作始终会覆盖用户现有的自定义声明。但是,如果在通过自定义身份验证登录的用户上定义了相同的自定义用户声明,则自定义令牌中定义的重叠声明具有更高的优先级,并始终覆盖通过此 API 在用户上定义的自定义用户声明。

所以,这是预期的行为。


推荐阅读