我使用具有其他索赔的自定义令牌创建了一个新用户。
我能够访问Firestore安全规则中的索赔,但在云功能中,它返回了未定义。
创建用户的代码:
admin.auth()
.createCustomToken(uid, claims)
.then(token => {
console.log(token);
});
用于创建用户的代码:
admin.auth().getUser(uid)
.then((userRecord) => {
console.log(userRecord.customClaims);
});
USERRECORD.CUSTOMCLAIMS返回未定义的
您应该使用setCustomUserClaims()
。不是createCustomToken()
。
admin.auth()
.setCustomUserClaims(uid, claims)
.then(token => {
console.log(token);
});
setCustomUserClaims()
始终被覆盖,因此我建议获得当前的定制和合并。
这取决于情况,我建议使用异步/等待。
喜欢。
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);
}
}
见
- https://firebase.google.com/docs/reference/admin/node/admin.auth.auth.html#set-custom-user-claims
- https://firebase.google.com/docs/reference/admin/node/admin.auth.auth.html#create-custom-token
- https://developer.mozilla.org/en-us/docs/web/javascript/reference/refereny/statement/Statements/ashync_function
- https://developer.mozilla.org/en-us/docs/web/javascript/reference/reference/operators/await
更新
setCustomUserClaims()
在提供的UID
确定的现有用户上设置其他开发人员索赔
见
- https://firebase.google.com/docs/auth/admin/custom-clairs
- https://firebase.google.com/docs/reference/admin/node/admin.auth.auth.html#set-custom-user-claims
createCustomToken()
创建一个新的firebase自定义令牌(JWT(,可以将其发送回客户端设备,用于与客户端SDKS的signWithCustomToken((方法签名。
您还可以选择指定要包含在自定义令牌中的其他索赔。例如,在下面,已添加了PremiumAccount字段到自定义令牌,该字段将在Auth/request.auth对象中可用:
中的Auth对象:
它仅在您的安全规则中的auth/request.auth对象中可用。因此未设置用户定制。
见
- https://firebase.google.com/docs/auth/admin/create-custom-tokens
- https://firebase.google.com/docs/reference/admin/node/admin.auth.auth.html#create-custom-token