Firebase setCustomUserClaims 总是覆盖旧的

had*_*des 4 node.js firebase firebase-authentication google-cloud-functions

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

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

{isAdmin: true}
Run Code Online (Sandbox Code Playgroud)

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

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

所以我期望的是:

{isAdmin: true, hasUserModule: true}
Run Code Online (Sandbox Code Playgroud)

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

Dou*_*son 5

根据自定义声明文档

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

所以,这是预期的行为。

  • 当您有自定义声明并尝试使用 firebase stripe 扩展(添加 stripeRole 会删除您的自定义声明)时,这就是问题。未来有改变的计划吗? (2认同)