我如何通过HTTP REST API访问我的Firebase数据库?

16

感谢这个答案,我可以通过HTTP REST API和电子邮件/密码连接到Firebase 3。使用此API登录会返回一个访问令牌,用于访问Firebase数据库。此访问令牌在1小时后过期。登录后还返回了刷新令牌,我可以使用它来刷新我的访问令牌。以下是我具体要做的:

方法:

POST

网址:

https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=<my-firebase-api-key>

有效载荷:

{
    email: "<email>",
    password: "<password>",
    returnSecureToken: true
}

响应:

{
    "kind": "identitytoolkit#VerifyPasswordResponse",
    "localId": "<firebase-user-id>", // Use this to uniquely identify users
    "email": "<email>",
    "displayName": "",
    "idToken": "<provider-id-token>", // Use this as the auth token in database requests
    "registered": true,
    "refreshToken": "<refresh-token>",
    "expiresIn": "3600"
}

刷新我的访问令牌时:

网址:

https://securetoken.googleapis.com/v1/token?key=<my-firebase-api-key>

有效载荷:

{
    grant_type: "refresh_token",
    refresh_token: "<refresh-token>"
}

响应:

{
  "access_token": "<access-token>",
  "expires_in": "3600",
  "token_type": "Bearer",
  "refresh_token": "<refresh-token>",
  "id_token": "<id-token>",
  "user_id": "<user-id>",
  "project_id": "<project-id>"
}

如果我拥有访问令牌,如何通过HTTP REST API访问我的数据库?


1
看一下这个:https://firebase.google.com/docs/reference/rest/database#section-param-auth 他们在文档中提到了。 - AjayShelar
1个回答

17

和技术支持进行沟通后,我得到了以下答复:

在你的数据库规则中,包含类似于以下内容的规则,以保证与你的操作兼容:

{
"rules": {
"users": {
"$user_id": {
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid",
".read": "$user_id === auth.uid"
}
    }
  } 
}

在你的数据库中,创建一个users表,在其中创建一个名为你使用身份验证电子邮件/密码帐户的<user-id>的表。该表中的信息可以通过您的access-key进行访问。

然后像这样发送请求:

https://samplechat.firebaseio-demo.com/users/<user-id>.json?auth=<access-key>

其中access-key是可以在Google的JSON响应中作为idTokenid_Tokenaccess_key知名的密钥。


8
这是我得到的最佳答案。Firebase文档非常混乱和令人困惑!他们甚至没有在REST文档中讨论idToken。太遗憾了。非常感谢您。 - Richeek
1
嗨,我正在尝试让一些JSON文件公开可用,而其他文件则不行。我正在使用以下代码:{"rules": {"publicjson": {".read": true, ".write": false}, ".read": "auth != null", ".write": false}}。我可以轻松访问publicjson,但是我无法访问任何其他符合".read": "auth != null"规则的JSON文件。我正在使用Postman进行GET请求,并带有Authorization: Bearer xxx,但没有成功。您对此了解吗?我的想法是只需在应用程序中存储访问密钥并在请求中使用即可,无需用户表。谢谢。 - Edison Spencer
@Richeek,你知道我上面问的问题吗?^^^谢谢 - Edison Spencer
1
如果你只是想要一个管理员用户,那么你需要做的是:1. 从 Firebase 控制台创建一个管理员用户(使用某些电子邮件和密码组合)2. 记下其 UID 并将读取权限更改为 auth.uid=='<add-uid>' 3. 从客户端使用电子邮件和密码凭据登录 Firebase。请注意,如果您使用 REST 进行登录,则登录网址的格式为 (https://www.googleapis.com/identitytoolkit/v3/relyingparty/setAccountInfo?key=[API_KEY])。也许最好创建一个单独的问题,以便其他人也可以利用! - Richeek
我猜从技术上讲,你会将该用户与应用程序一起发布,并使用该用户的凭据进行登录。 - Richeek
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接