我使用带有附加声明的自定义令牌创建了一个新用户。
我可以访问Firestore安全规则中的声明,但是在云函数中,它返回未定义的内容。
用于创建用户的代码:
admin.auth()
.createCustomToken(uid, claims)
.then(token => {
console.log(token);
});
用于创建用户的代码:
admin.auth().getUser(uid)
.then((userRecord) => {
console.log(userRecord.customClaims);
});
userRecord.customClaims返回未定义
答案 0 :(得分:1)
您应该使用setCustomUserClaims()
。不是createCustomToken()
。
admin.auth()
.setCustomUserClaims(uid, claims)
.then(token => {
console.log(token);
});
setCustomUserClaims()
始终被覆盖,因此我建议获取当前的customClaims并合并。
这要视情况而定,我建议使用async / await。
喜欢这个。
async function setClaims(uid, claims) {
try {
const userRecord = await admin.auth().getUser(uid);
return await admin.auth().setCustomUserClaims(uid, {
...userRecord.customClaims,
...claims
});
} catch (e) {
return Promise.reject(e);
}
}
请参见
setCustomUserClaims()
为由提供的uid标识的现有用户设置其他开发者声明
请参见
createCustomToken()
创建一个新的Firebase自定义令牌(JWT),该令牌可以发送回客户端设备,以用于使用客户端SDK的signInWithCustomToken()方法登录。
您还可以选择指定要包含在自定义令牌中的其他声明。例如,下面,在自定义令牌中添加了一个premiumAccount字段,该字段将在“安全规则”中的auth / request.auth对象中提供:
它仅在安全规则中的auth / request.auth对象中可用。因此,请勿设置用户customClaims。
请参见