云功能-用户自定义声明返回未定义

时间:2019-07-04 13:13:35

标签: firebase google-cloud-firestore google-cloud-functions

我使用带有附加声明的自定义令牌创建了一个新用户。

我可以访问Firestore安全规则中的声明,但是在云函数中,它返回未定义的内容。

用于创建用户的代码:

admin.auth()
.createCustomToken(uid, claims)
.then(token => {
    console.log(token);
 });

用于创建用户的代码:

admin.auth().getUser(uid)
.then((userRecord) => { 

 console.log(userRecord.customClaims);

});

userRecord.customClaims返回未定义

1 个答案:

答案 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。

请参见