8

感谢this answer我可以通过HTTP REST API和电子邮件/密码连接到Firebase 3。使用此API登录会返回用于访问Firebase数据库的访问令牌。此访问令牌在1小时后过期。登录后也会返回一个刷新令牌,我可以使用该令牌刷新我的访问令牌。下面是我特别做:如何通过HTTP REST API访问我的Firebase数据库?

方法:

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给予我有我的访问权限恩?

回答

9

因此,与技术支持沟通后,这是我的答案:

在你的数据库的规则,包括这样的事情是与你在做什么兼容:

{ 
"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是可以在谷歌从JSON响应被称为idTokenid_Token,或access_key的关键。

+3

这是我得到的最佳答案。 Firebase文档非常混乱和混乱!他们甚至不会在REST文档中的任何地方讨论idToken。这样的耻辱。非常感谢。 – Richeek

+0

嗨,我试图让一些json文件公开可用,其他人不是。我在做这个'{“rules”:{“publicjson”:{“.read”:true,“.write”:false},“.read”:“auth!= null”,“.write”:false} }'。访问'publicjson'我没有问题。但是,我无法访问任何属于''.read“:”auth!= null“'规则的其他json。我试图让邮递员用'Authorization:Bearer xxx'做'GET'请求,但没有运气。你知道这件事吗?这个想法只是将访问密钥存储在应用程序中并用于请求中。不需要用户表。谢谢 –

+0

@Richeek你知道我上面提到的什么吗? ^^^感谢 –