Flutter 如何在Flatter中通过HTTP Post请求将AuthPayload发送到Firebase实时数据库
我已经构建了我的应用程序,通过http.post请求将数据发送到Firebase RealtimeDB,在我添加读写规则之前,一切都很正常,顺便说一句,这些规则并不复杂:Flutter 如何在Flatter中通过HTTP Post请求将AuthPayload发送到Firebase实时数据库,flutter,firebase-realtime-database,Flutter,Firebase Realtime Database,我已经构建了我的应用程序,通过http.post请求将数据发送到Firebase RealtimeDB,在我添加读写规则之前,一切都很正常,顺便说一句,这些规则并不复杂: { "rules": { ".read" : false, ".write" : false, "client":{ "$uid":{ ".read"
{
"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
我几乎可以肯定我犯了一个巨大的新手错误,但我似乎看不出在哪里。提前感谢您的时间 不可能向实时数据库REST API发送任意UID。这实际上是一个相当大的安全漏洞——它允许任何有互联网连接的人冒充只知道UID的注册用户 为了了解auth如何与RTDB一起工作,请从。传递身份验证令牌有两个选项: 通过以下方法之一对用户进行身份验证:
- Google OAuth2访问令牌-通常,实时数据库的读写能力由实时数据库控制 规则。但是,您可以从服务器访问数据并授予该权限 使用Google OAuth2对您的数据进行服务器完全读写访问 从服务帐户生成的访问令牌
- Firebase ID令牌-您可能还希望发送作为单个用户进行身份验证的请求,例如使用 客户端SDK上的实时数据库规则。restapi接受 与客户端SDK使用的Firebase ID令牌相同
您需要传递一个ID令牌(而不是UID),该令牌只能通过最终用户帐户成功登录获得。您可以了解有关ID代币的更多信息。我第一次阅读该文档时就搞错了,谢谢您的时间!