我想从Firebase读取数据:
firebase.database().ref('videos/' + $videoId + '/data' ).once('value')
但是在安全规则中,我不想让任何人都可以理解。我也不想使用:
".read" : true
我希望未经身份验证的用户能够通过URL传递具有特殊令牌的数据,从而能够读取它们。
firebase.database().ref('videos/' + $videoId + '/data?token=secretToken').once('value')
我的视频数据如下:
{
vidoes: {
$videoId: {
data: {
...
}
tokens: {
secretToken: true
}
}
}
我想安全规则看起来像这样:
{
vidoes: {
$videoId: {
data: {
".read": "data.parent().child('tokens/' + auth.urlQuery('token').val() ).exist()"
}
}
}
是否有人可以访问Firbase安全规则中的查询字符串/ url参数?我可以使用Firebase函数创建一个api,但这是一个额外的步骤和网络请求。
基本上,它的行为就像是Firebase存储的“令牌”:
https://firebasestorage.googleapis.com/v0/b/columbus-c4de8.appspot.com/o/richContent%2F1-min.jpeg_-LPgLxBMt1tBR0dDdNzH?alt=media&token=dfe24c92-e0c2-484a-81df-c09a710b3d34
如果令牌正确,则用户可以读取数据。
注意:从技术上讲,可以将令牌用于“ .write”安全规则。请参阅:Using newData on Updates in Firebase Security Rules
答案 0 :(得分:0)
这是不可能的,并且本质上也不安全。如果任何人都有一个简单的密码可以访问数据,则Firebase安全规则将不安全。对移动客户端进行反向工程以增加允许查询的密码非常容易。
如果您想向用户授予查询访问权限,那么唯一安全的方法就是与Firebase身份验证结合使用,该方法可以验证执行请求的人员的身份。