Firebase数据库规则:未知变量'$成员ID1和x27;
我有以下Firebase数据库: 我想添加数据库规则,以保护只有适当的用户才能访问其消息 当我添加以下内容时,我得到一个错误: 有人能给我建议吗 谢谢 更新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
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"
}
}
}
}