Firebase setCustomUserClaims总是覆盖旧的

时间:2019-02-25 16:22:40

标签: node.js firebase firebase-authentication google-cloud-functions

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

如果用户是admin,则自定义声明为:

{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,它基本上覆盖了旧的声明,为什么?

1 个答案:

答案 0 :(得分:1)

根据documentation on custom claims

  

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

所以,这是预期的行为。