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' }
还是我做错了什么?
答案 0 :(得分:7)
setCustomUserClaims
的Firebase文档指出:
- customUserClaims :对象
开发者声称要设置。如果传递null,则会删除现有的自定义声明。传递大于1000个字节的自定义声明有效负载会引发错误。自定义声明将添加到用户的ID令牌,该ID令牌将在每个经过身份验证的请求上传输。对于与配置文件无关的访问相关用户属性,请使用数据库或其他单独的存储系统。
从此描述尚不完全清楚,但是语句“如果传递null,则删除现有的自定义声明”,提示每次调用[{"id":8,"name":"christoph","age":32,"number":"555-555-5555"},
{"id":9,"name":"debra","age":31,"number":"555-555-5555"},
{"id":10,"name":"eric","age":29,"number":"555-555-5555"},
{"id":19,"name":"richard","age":20,"number":"555-555-5555"},
{"id":14,"name":"santiago","age":25,"number":"(555)555-5555"}]
都将完全覆盖自定义声明。
因此,需要对自定义声明进行如下设置:
setCustomUserClaims
claims = {
a: 'value',
b: 'value'
}
admin.auth().setCustomUserClaims(uid, claims)
可以创建一个辅助功能以合并到新的声明中。
addCustomUserClaims
答案 1 :(得分:0)
Christopher Peisert's answer是正确的,但是可以做得更干净
admin.auth().getUser(uid).then(({customClaims: oldClaims}) =>
admin.auth().setCustomUserClaims(uid, { ...oldClaims, b: 'value' }))
如果您想将此逻辑抽象为一个函数,可以通过以下方式完成
function addCustomUserClaims(uid, claims) {
return admin.auth().getUser(uid).then(({customClaims}) =>
admin.auth().setCustomUserClaims(uid, { ...customClaims, ...claims }))
}
或等同于
const addCustomUserClaims = (uid, claims) =>
admin.auth().getUser(uid).then(({customClaims}) =>
admin.auth().setCustomUserClaims(uid, { ...customClaims, ...claims }))