如何在Flutter中通过HTTP Post请求将AuthPayload发送到Firebase Realtime-Database

时间:2020-11-09 23:59:50

标签: flutter firebase-realtime-database

我构建了自己的应用程序,以通过http.post请求将数据发送到Firebase RealtimeDB,直到添加了读写规则为止,一切工作都很好,

{
  "rules": {
    ".read"  : false,
    ".write" : false,

    "client":{
      "$uid":{
        ".read": "auth.uid === $uid",
        ".write": "auth.uid === $uid"
      }
    }
  }
}

请求的代码如下:

createClient (ClientModel client) async{

    final userData = new SavedUserData();

    final url = '$_dbUrl/cliente/${userData.uid}.json?auth=${userData.uid}';

    final resp = await http.post(url, body: clientModelToJson(client));

我收到一个解析错误,但我得到了,auth未发送.json文件,但均未发送:

  • auth = {“ uid”:“ myUsersUid”}
  • auth =“ {” uid“:” myUsersUid“}”
  • 使用{“ uid”:“ myUsersUid”}编码地图,并将其附加到url

似乎可以解决问题!

我几乎可以肯定我犯了一个新秀错误,但是我似乎看不到哪里。谢谢您的宝贵时间!

1 个答案:

答案 0 :(得分:0)

不可能向实时数据库REST API发送任意UID。实际上,这实际上是一个很大的安全漏洞-它将允许任何具有Internet连接的人冒充仅知道其UID的注册用户。

为了了解auth如何与RTDB一起使用,请从documentation开始。您可以通过两种方式传递身份验证令牌:

通过以下方法之一对用户进行身份验证:

  • Google OAuth2访问令牌-通常,由实时数据库控制读写实时数据库的能力 规则。但是,您可以从服务器访问数据并将其授予 服务器使用Google OAuth2对您的数据具有完全的读写访问权限 从服务帐户生成的访问令牌。

  • Firebase ID令牌-您可能还希望发送通过个人用户身份验证的请求,例如限制访问 客户端SDK上的实时数据库规则。 REST API接受 客户端SDK使用相同的Firebase ID令牌。

您将需要传递一个ID令牌(不是UID),该令牌只能通过最终用户帐户成功登录才能获得。您可以了解有关ID令牌here的更多信息。