C# Firebase实时数据库规则-安全功能
在我的数据库中,我有以下结构 /玩家/UID{1,2,3,…n}/对于每个UID==>{Child1,Child2,…Childn} 在规则中,为了保护数据,我在两个孩子之间创建了一个类似于下面的函数,但是,写入操作任务出现故障,我不知道原因。此外,您能否提出一些更安全、更实用的实施方案C# Firebase实时数据库规则-安全功能,c#,firebase-realtime-database,firebase-security,C#,Firebase Realtime Database,Firebase Security,在我的数据库中,我有以下结构 /玩家/UID{1,2,3,…n}/对于每个UID==>{Child1,Child2,…Childn} 在规则中,为了保护数据,我在两个孩子之间创建了一个类似于下面的函数,但是,写入操作任务出现故障,我不知道原因。此外,您能否提出一些更安全、更实用的实施方案 { "rules": { ".read": "auth != null", ".write": "auth != null && newData.child('Child1'
{
"rules": {
".read": "auth != null",
".write": "auth != null && newData.child('Child1').val() * newData.child('Child1').val() * 1000000 + 1000 * newData.child('Child1').val() - 1000 === newData.child('Child2').val()"
}
}
我的简化写函数如下所示,其中Child2是Child1的函数
public void WriteDatabase(float child1, int child2)
{
if (AuthController.Instance != null && AuthController.Instance.user != null)
{
uid = AuthController.Instance.user.UserId;
}
else
{
return;
}
LeaderBoardEntry entry = new LeaderBoardEntry(child1, child2);
Dictionary<string, System.Object> entryValues = entry.ToDictionary();
Dictionary<string, System.Object> childUpdates = new Dictionary<string, System.Object>();
childUpdates["/Players/" + uid + "/"] = entryValues;
reference.UpdateChildrenAsync(childUpdates).ContinueWith(task =>
{
if (task.IsCanceled)
{
UnityEngine.Debug.Log("Write database cancelled");
return;
}
if (task.IsFaulted)
{
UnityEngine.Debug.Log("Write database faulted");
return;
}
if (task.IsCompleted)
{
UnityEngine.Debug.Log("Write database completed");
}
});
}
您的规则设置为验证写入根目录的数据:
{
"rules": {
".read": "auth != null",
".write": "auth != null &&
newData.child('Child1').val() * newData.child('Child1').val() * 1000000 + 1000 * newData.child('Child1').val() - 1000
=== newData.child('Child2').val()"
}
}
因此,这允许任何经过身份验证的用户写入一个值,该值将特定公式与数据库的根相匹配
但是您的代码正在将相同的结构写入/Players/$uid,这是数据库中的不同位置
您需要确保在数据库中的正确位置定义这些验证规则:
{
"rules": {
".read": "auth != null",
"Players": {
"$uid": {
".write": "auth != null &&
newData.child('Child1').val() * newData.child('Child1').val() * 1000000 + 1000 * newData.child('Child1').val() - 1000
=== newData.child('Child2').val()"
}
}
}
}
请编辑您的问题以显示。我编辑了,谢谢您的评论。我们无法知道child1和child2在这里是什么。请确保代码最小且完整,这意味着我们可以独立运行它,而不需要您的问题中没有的任何内容。首先,感谢您的帮助,Frank,更好地表示我的数据库结构。经过多次尝试后,我意识到,由于浮动变量未被识别为数字且计算不起作用,错误被拒绝。。。我创建了另一个整数变量来检查它,它就像一个符咒:如果我需要,我如何在规则中得到1.002的值作为数字来进行计算。val以字符串的形式获取,我猜..val获取节点的值,无论它存储在何处。如果你存储了一个数字,它就会得到一个数字。我模模糊糊地回忆起一些关于浮点数的事情,但无法立即找到一些关于浮点数的事情。如果你能重现这个问题,我建议你用一个简单的句子开始一个问题。请确保以文本形式包含最小值、代码、JSON和规则,以便于他人根据您共享的内容进行复制。
{
"rules": {
".read": "auth != null",
"Players": {
"$uid": {
".write": "auth != null &&
newData.child('Child1').val() * newData.child('Child1').val() * 1000000 + 1000 * newData.child('Child1').val() - 1000
=== newData.child('Child2').val()"
}
}
}
}