Cloud Firestore自定义声明为空

时间:2019-03-21 04:22:09

标签: firebase google-cloud-firestore firebase-security-rules

我通过使用云功能向用户添加令牌来阻止用户

exports.blockUser = functions.https.onCall(async(data, context) => {

const user = await admin.auth().getUserByEmail(data['email']);

if(context.auth.token.admin){
    admin.auth().setCustomUserClaims(user.uid, {
        block: true
    });
    console.log(data['email'] + " has been blocked");
    return 1;
}else{

    return 2;

}});

在我的规则中,我已设置为block == null时允许读取,因为未被阻止的用户的令牌中将不会包含该数据。

allow read: if request.auth.token.block == null;

但是,这不起作用,并且权限被拒绝。

为了确保令牌数据存在,我尝试了另一种方法

allow read: if request.auth.token.block == true;

这仅允许阻止用户读取数据。而且有效。这意味着令牌上的数据没有问题。

我该怎么做才能使令牌上没有“ block”属性的用户能够读取数据?

1 个答案:

答案 0 :(得分:0)

使用安全规则,缺少的属性与等于null的属性不同。相反,您应该检查一下block属性是否确实存在,并检查其值是否应该限制访问

allow read: if !("block" in request.auth.token) || equest.auth.token.block == false;

请参考Maprequest.auth.token是地图)的文档。