8

Nhờ this answer Tôi có thể kết nối với Firebase 3 thông qua API REST HTTP và email/mật khẩu. Đăng nhập bằng API này trả về mã thông báo truy cập được sử dụng để truy cập Cơ sở dữ liệu Firebase. Mã thông báo truy cập này sẽ hết hạn sau 1 giờ. Mã thông báo làm mới cũng được trả lại sau khi đăng nhập, mà tôi có thể sử dụng để làm mới mã thông báo truy cập của mình. Dưới đây là những gì tôi đang làm cụ thể:Làm cách nào để truy cập Cơ sở dữ liệu Firebase của tôi qua API REST HTTP?

Phương pháp:

POST 

URL:

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

Payload:

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

đáp ứng:

{ 
    "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" 
} 

Trong trường hợp làm mới thẻ truy cập của tôi:

URL:

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

Payload:

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

đáp ứng:

{ 
    "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>" 
} 

Làm thế nào để truy cập vào cơ sở dữ liệu của tôi qua HTTP REST API cho rằng tôi có quyền truy cập của mình vi?

Trả lời

9

Vì vậy, sau khi trao đổi với sự hỗ trợ kỹ thuật, đây là câu trả lời của tôi:

Trong quy tắc cơ sở dữ liệu của bạn, bao gồm một cái gì đó như thế này đó là tương thích với những gì bạn đang thực hiện:

{ 
"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" 
} 
    } 
    } 
} 

Và trong cơ sở dữ liệu của bạn , tạo một bảng users và trong bảng đó, hãy tạo bảng có tên là <user-id> của tài khoản email/mật khẩu xác thực bạn đang sử dụng. Trong bảng đó là thông tin bạn sẽ có thể truy cập qua số access-key của mình.

Sau đó, gửi một yêu cầu như thế này:

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

đâu access-key là chìa khóa có thể được gọi là idToken, id_Token, hoặc access_key trong phản ứng JSON từ Google.

+3

Đây là câu trả lời hay nhất tôi nhận được. Tài liệu Firebase rất lộn xộn và khó hiểu! Họ thậm chí không nói về idToken ở bất kỳ đâu trong tài liệu REST. Thật là ngại quá. Cảm ơn rất nhiều vì điều này. – Richeek

+0

Xin chào, tôi đang cố gắng cho phép một số tệp json hiển thị công khai và những tệp khác không có. Tôi đã làm điều này '{" quy tắc ": {" publicjson ": {" .read ": true," .write ": false}," .read ":" auth! = Null "," .write ": false} } '. Tôi không gặp vấn đề gì khi truy cập 'publicjson'. Tuy nhiên, tôi không thể truy cập bất kỳ json nào khác nằm trong quy tắc '" .read ":" auth! = Null "'. Tôi đang cố gắng để đưa ra yêu cầu 'GET' với' Authorization: Bearer xxx' nhưng không may mắn. Bạn có biết gì về điều này không? Ý tưởng sẽ chỉ là có khóa truy cập được lưu trữ trong ứng dụng và được sử dụng trong các yêu cầu. Không có bảng người dùng cần thiết.Cảm ơn –

+0

@Richeek Bạn có biết gì về những gì tôi đã hỏi ở trên không? ^^^ Cảm ơn –

Các vấn đề liên quan