阻止用户写入firebase表中的特定字段

阻止用户写入firebase表中的特定字段,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我试图找出如何阻止用户在自己的数据(用户内部)中写入用户名字段。最干净的方法是什么?我想我需要做一个云函数来检查用户名是否是唯一的,然后才允许写入,但目前规则允许用户写入用户中的任何字段 您正在尝试验证用户请求的更新是否有效。你可以通过以下方式实现它 这些查询现在将失败 UPDATE { username: 23, displayName: "frank" } 但这些都是成功的 UPDATE { username: 77, displayName: &

我试图找出如何阻止用户在自己的数据(用户内部)中写入用户名字段。最干净的方法是什么?我想我需要做一个云函数来检查用户名是否是唯一的,然后才允许写入,但目前规则允许用户写入用户中的任何字段


您正在尝试验证用户请求的更新是否有效。你可以通过以下方式实现它

这些查询现在将失败

UPDATE
{
  username: 23,
  displayName: "frank"
}


但这些都是成功的

UPDATE
{
  username: 77,
  displayName: "doug"
}


**注**:如果您在客户端本身创建用户帐户,即用户名最初由客户端本身提供,则上述查询将失败,因为用户名不存在。为此,您可能需要更改为:
".validate": "!data.exists() || newData.val() === data.val()" 

非常感谢,我不希望他们能够写的用户名在所有。这可以通过云函数完成,并且只允许他们写入唯一的用户名。但是,在某些情况下,用户仍然可以写入字段。我不这么认为。validate规则确保字段不能被覆盖。简单地说,
newData.val()===data.val()
确保旧数据(原始用户名)应该与新数据相同。好的,这应该被更改更新{username:7,displayName:“doug”}
UPDATE
{
  username: 37
}
UPDATE
{
  username: 77,
  displayName: "doug"
}
UPDATE
{
  displayName: "Doug"
}
".validate": "!data.exists() || newData.val() === data.val()"