Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase数据库规则:未知变量'$成员ID1和x27;_Firebase_Firebase Realtime Database_Firebase Authentication_Firebase Security - Fatal编程技术网

Firebase数据库规则:未知变量'$成员ID1和x27;

Firebase数据库规则:未知变量'$成员ID1和x27;,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,我有以下Firebase数据库: 我想添加数据库规则,以保护只有适当的用户才能访问其消息 当我添加以下内容时,我得到一个错误: 有人能给我建议吗 谢谢 更新 findMessages(chatItem: any): Observable<any[]> { // populates the firelist return this.af.database.list('/message/', { query: { orderByChil

我有以下Firebase数据库:

我想添加数据库规则,以保护只有适当的用户才能访问其消息

当我添加以下内容时,我得到一个错误:

有人能给我建议吗

谢谢

更新

findMessages(chatItem: any): Observable<any[]> { // populates the firelist
    return this.af.database.list('/message/', {
        query: {
            orderByChild: 'negativtimestamp'
        }
    }).map(items => {
        const filtered = items.filter(
            item => ((item.memberId1 === chatItem.memberId1 && item.memberId2 === chatItem.memberId2)
                || (item.memberId1 === chatItem.memberId2 && item.memberId2 === chatItem.memberId1))
        );
        return filtered;
    });
}
findMessages(chatItem:any):可观察{//填充firelist
返回此.af.database.list(“/message/”{
查询:{
orderByChild:“时间戳”
}
}).map(项目=>{
const filtered=items.filter(
item=>((item.memberId1==chatItem.memberId1&&item.memberId2==chatItem.memberId2)
||(item.memberId1===chatItem.memberId2&&item.memberId2===chatItem.memberId1))
);
返回过滤;
});
}

您应该有定义成员的变量,然后引用这些变量

下面是来自的聊天示例

{
“规则”:{
“房间名称”:{
//任何登录的用户都可以获得房间名称列表
“.read”:“auth!==null”,
“$room_id”:{
//这只是为了记录房间的结构,因为
//它们是只读的,没有写入规则允许进行设置
.validate:“newData.isString()”
}
},
“成员”:{
//我可以加入或离开任何房间(否则这将是一个无聊的演示)
//我可以在每个房间里有一个不同的名字只是为了好玩
“$room_id”:{
//任何成员都可以读取成员名称列表
.read:“data.child(auth.uid).exists()”,
//要添加成员,文件室必须已存在
“.validate”:“root.child('room\u names/'+$room\u id).exists()”,
“$user_id”:{
“.write”:“auth.uid==$user\u id”,
.validate:“newData.isString()&&newData.val().length>0&&newData.val().length<20”
}
}
},
“信息”:{
“$room_id”:{
//任何成员都可以阅读房间的邮件列表
.read:“root.child('members/'+$room_id+'/'+auth.uid).exists()”,
//我们要向其发送邮件的房间必须有效
“.validate”:“root.child('room\u names/'+$room\u id).exists()”,
“$message_id”:{
//如果新消息不存在,则可以创建它,但
//无法修改或删除
//房间里的任何成员都可以写新消息
.write:“root.child('members/'+$room_id+'/'+auth.uid).exists()&&!data.exists()&&newData.exists()”,
//房间属性必须是房间名称中的有效键/(房间必须存在)
//要写入的对象必须具有名称、消息和时间戳
“.validate”:“newData.haschilds(['user'、'message'、'timestamp'])”,
//该消息必须由登录用户编写
“用户”:{
.validate:“newData.val()==auth.uid”
},
//消息长度必须大于0个字符且小于50个字符
“消息:{.validate:”“newData.isString()&&newData.val().length>0&&newData.val().length<50”,
//不能在过去或将来添加邮件
//客户端应使用firebase.database.ServerValue.TIMESTAMP
//确保准确的时间戳

“timestamp:{”.validate:“newData.val()您应该有定义成员的变量,然后引用这些变量

下面是来自的聊天示例

{
“规则”:{
“房间名称”:{
//任何登录的用户都可以获得房间名称列表
“.read”:“auth!==null”,
“$room_id”:{
//这只是为了记录房间的结构,因为
//它们是只读的,没有写入规则允许进行设置
.validate:“newData.isString()”
}
},
“成员”:{
//我可以加入或离开任何房间(否则这将是一个无聊的演示)
//我可以在每个房间里有一个不同的名字只是为了好玩
“$room_id”:{
//任何成员都可以读取成员名称列表
.read:“data.child(auth.uid).exists()”,
//要添加成员,文件室必须已存在
“.validate”:“root.child('room\u names/'+$room\u id).exists()”,
“$user_id”:{
“.write”:“auth.uid==$user\u id”,
.validate:“newData.isString()&&newData.val().length>0&&newData.val().length<20”
}
}
},
“信息”:{
“$room_id”:{
//任何成员都可以阅读房间的邮件列表
.read:“root.child('members/'+$room_id+'/'+auth.uid).exists()”,
//我们要向其发送邮件的房间必须有效
“.validate”:“root.child('room\u names/'+$room\u id).exists()”,
“$message_id”:{
//如果新消息不存在,则可以创建它,但
//无法修改或删除
//房间里的任何成员都可以写新消息
.write:“root.child('members/'+$room_id+'/'+auth.uid).exists()&&!data.exists()&&newData.exists()”,
//房间属性必须是房间名称中的有效键/(房间必须存在)
//要写入的对象必须具有名称、消息和时间戳
“.validate”:“newData.haschilds(['user'、'message'、'timestamp'])”,
//该消息必须由登录用户编写
“用户”:{
.validate:“newData.val()==auth.uid”
},
//消息长度必须大于0个字符且小于50个字符
“消息:{.validate:”“newData.isString()&&newData.val().length>0&&newData.val().length<50”,
//不能在过去或将来添加邮件
//客户端应使用firebase.database.ServerValue.TIMESTAMP
//确保准确的时间戳

“timestamp:{”.validate:“newData.val()在
.read
规则的表达式中,以
$
开头的变量表示路径中的键

但是,成员ID不是键;它们是数据成员。要在表达式中使用它们,可以使用快照的和方法。如下所示:

{
  "rules": {
    "message": {
      "$key": {
        ".read": "data.child('memberId1').val() === auth.uid || data.child('memberId2').val() === auth.uid"
      }
    }
  }
}

.read
规则的表达式中,以
$
开头的变量表示路径中的键

但是,成员ID不是密钥;
{
  "rules": {
    "message": {
      "$key": {
        ".read": "data.child('memberId1').val() === auth.uid || data.child('memberId2').val() === auth.uid"
      }
    }
  }
}