为什么我的 Firebase RTDB 规则总是返回未经授权的结果

问题描述 投票:0回答:1

规则

{
  "rules": {
    "Accounts": {
      ".read": "true",
      "$user_id": {
        // Check if object has all required values after operation
        ".validate": "newData.child('Username').isString() && 
                      newData.child('Password').isString() && 
                      newData.child('Salt').isString() && 
                      newData.child('ExpirationDate').isString()",
        // Only allow username update if:
        //  * There is a provided username AND
        //  * There is no existing username (new account) OR
        //  * It is the same as the existing username (patches)
        "Username": {
          ".write": "(!data.exists() || data.val() === newData.val())"
        },
        "Password":         {".write": "newData.exists()"},
        "Salt":             {".write": "newData.exists()"},
        "ExpirationDate":   {".write": "newData.exists()", ".validate": "newData.isString()"},
        "IsVerified":       {".write": "newData.exists()", ".validate": "newData.isBoolean()"},
        "Domains":          {".write": "true"},
        "ActiveDomain":     {".write": "true"},
        "VerificationCode": {".write": "!data.exists() || newData.exists()", ".validate": "newData.isString()"}
      },
    }
  }
}

帖子已发送

发送至 [FIREBASEURL]/Accounts/blmvyubcyhislpquhj@ytnhy,com.json

{
  "Username": "blmvyubcyhislpquhj@ytnhy,com",
  "Password": "lR3lh7BcXU0=",
  "Salt": "0sFEiXUsUpQ=",
  "ExpirationDate": "8/1/2024",
  "ActiveDomain": null,
  "Domains": null,
  "IsVerified": false,
  "VerificationCode": "327761"
}

此帖子始终返回未经授权。

根据我的发现,如果我删除所有“用户名”级别规则并将其替换为虚拟“.write”:“true”,则规则有效。

我尝试过使用小写字段名称。 我只尝试过该级别的用户名规则。 游乐场似乎显示该请求是有效的。

如果可能,我想避免使用 Firebase 身份验证。我意识到这样会不太安全。

json rest firebase-realtime-database firebase-security
1个回答
0
投票

发送

POST
请求会在您调用它的路径下创建一个新的子级。因此,您将 JSON 写入
[FIREBASEURL]/Accounts/blmvyubcyhislpquhj@ytnhy,com/newpushID
,这是您的规则不允许的。

要解决此问题,请使用

PUT
而不是
POST

顺便说一句,这些是正常的 RESTful 语义,所以我建议阅读这些内容。

© www.soinside.com 2019 - 2024. All rights reserved.