我通过使用云功能向用户添加令牌来阻止用户
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”属性的用户能够读取数据?
答案 0 :(得分:0)
使用安全规则,缺少的属性与等于null的属性不同。相反,您应该检查一下block属性是否确实存在,并检查其值是否应该限制访问
allow read: if !("block" in request.auth.token) || equest.auth.token.block == false;
请参考Map(request.auth.token
是地图)的文档。