我正在尝试使用以下内容设置自定义声明:
admin.auth().setCustomUserClaims(user.uid, {['hguwukrpyrwxerqr679p']: true});
其中CCD_ 1是消防仓库数据库中对象的唯一ID。这个对象在创建时有自己的bucket。此bucket具有以下安全规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
allow read: if request.auth.token[bucket];
allow write: if false;
}
}
不幸的是,这不起作用,我得到了一个403错误代码。我不知道为什么,我已经尝试在firebase storage
的规则操场上使用上面的用户来模拟请求。令牌部分根本不显示任何自定义声明,但它应该显示,不是吗?
我已经做了好几个小时了,尝试了各种方法,甚至在云函数中手动设置声明。有人能为我指明正确的方向吗?或者就如何正确调试这个问题给出提示吗?通过执行调试云功能时
console.log(Object.keys(await admin.auth().getUser(uid).customClaims));
它显示了正确的内容。
存储在bucket根目录中的规则以某种方式被忽略。
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
allow read: if request.auth.token[bucket];
allow write: if false;
}
}
相反,应该使用通配符
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{somePath=**} {
allow read: if request.auth.token[bucket];
allow write: if false;
}
}
}
我不确定这是否应该被接受为一个答案,因为它只与问题部分相关。