云功能中设置的自定义声明不会显示在 Firebase 存储的云规则中
Custom claims set in cloud functions do not show up in cloud rules of firebase storage
我正在尝试使用以下设置自定义声明:
admin.auth().setCustomUserClaims(user.uid, {['hguwukrpyrwxerqr679p']: true});
其中 hguwukrpyrwxerqr679p
是 firestore 数据库中对象的唯一 ID。这个对象在创建时有自己的存储桶。此存储桶具有以下安全规则:
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));
它显示了正确的内容。
存储在存储桶根中的规则以某种方式被忽略。
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;
}
}
}
我不确定这是否应该被接受为答案,因为它只与问题部分相关。
我正在尝试使用以下设置自定义声明:
admin.auth().setCustomUserClaims(user.uid, {['hguwukrpyrwxerqr679p']: true});
其中 hguwukrpyrwxerqr679p
是 firestore 数据库中对象的唯一 ID。这个对象在创建时有自己的存储桶。此存储桶具有以下安全规则:
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));
它显示了正确的内容。
存储在存储桶根中的规则以某种方式被忽略。
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;
}
}
}
我不确定这是否应该被接受为答案,因为它只与问题部分相关。