Firebase Admin SDK:设置/合并自定义用户声明

l2aelba

Firebase是否有任何技巧{ merge: true }可以设置额外/更多自定义声明而不删除/覆盖旧变量?

复制步骤:

admin.auth().setCustomUserClaims(uid, { a: 'value' }) // Run this first
admin.auth().setCustomUserClaims(uid, { b: 'value' }) // Then run this after

结果:

{ b: 'value'}

预期结果

{ a: 'value', b: 'value' }

还是我做错了什么?

克里斯托弗·佩塞雷(Christopher Peiseret)

FirebasesetCustomUserClaims状态文件

  • customUserClaimsObject
    开发人员声明要设置。如果传递null,则会删除现有的自定义声明。传递大于1000字节的自定义声明有效负载将引发错误。自定义声明会添加到用户的ID令牌中,该ID令牌会在每个经过身份验证的请求中传输。对于与概要文件不相关的访问用户属性,请使用数据库或其他单独的存储系统。

从此描述尚不完全清楚,但是“如果传递null,则删除现有的自定义声明”这样的语句表明,每次调用,自定义声明都会被完全覆盖setCustomUserClaims

因此,需要将自定义声明设置如下:

claims = {
  a: 'value',
  b: 'value'
}

admin.auth().setCustomUserClaims(uid, claims) 

解决方法: addCustomUserClaims

可以创建一个辅助功能以合并到新的声明中。

async function addCustomUserClaims(uid, claims) {
  const user = await admin.auth().getUser(uid)
  let updated_claims = user.customClaims || {}

  for (let property in claims) {
    if (Object.prototype.hasOwnProperty.call(claims, property)) {
      updated_claims[property] = claims[property]
    }
  }
  await admin.auth().setCustomUserClaims(uid, updated_claims)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章