Firebase 有什么技巧吗{ merge: true }
设置额外/更多定制索赔没有删除/覆盖旧的变量?
重现步骤:
admin.auth().setCustomUserClaims(uid, { a: 'value' }) // Run this first
admin.auth().setCustomUserClaims(uid, { b: 'value' }) // Then run this after
Result:
{ b: 'value'}
预期结果:
{ a: 'value', b: 'value' }
还是我做错了什么?
Firebase 文档setCustomUserClaims https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth.html#set-custom-user-claims states:
-
自定义用户声明: Object
开发商声称要设置。如果传递 null,则删除现有的自定义声明。传递大于 1000 字节的自定义声明负载将引发错误。自定义声明被添加到用户的 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)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)