2015-04-07 35 views
1

我對Firebase很陌生,所以請原諒基本知識的缺乏。我正在評估它的一個項目。使用來自Google API的數據返回進行授權

Firebase很好地處理Google身份驗證。但是,基於從Google API返回的信息授權用戶的情況如何? Firebase如此嚴重的客戶端時,如何才能做到這一點?

例如,假設我想根據Google圖書API確認用戶是否擁有圖書來限制對Firebase數據的訪問。我知道我可以以後這樣的數據傳遞到令牌AUTH-ING用戶(這是半僞代碼):

ref.child("users").child(authData.uid).set({ 
    provider: authData.provider, 
    ownsBook: getBookInfo.ownsBook() 
}); 

我想用「ownsBook」參數來決定是否不是用戶可以訪問Firebase數據,但由於這一切都必須發生在客戶端,那麼如何阻止某人通過JS控制檯手動覆蓋它?

您通常會如何在Firebase中進行類似的操作?

回答

2

我不認爲Firebase公開Goog​​le Books API的信息(但我可能是錯的)。

除此之外:您將限制使用Firebase安全規則訪問數據:https://www.firebase.com/docs/security/quickstart.html

因此,如果我們假設你有你的書和所有制的數據結構是這樣的:

root 
    users 
    google:3246734 
     booksOwned 
     book:743267 
    books 
    book:743267 
     title.... 

您的規則可能看起來像

{ 
    "rules": { 
    "book": { 
     $book_id: { 
     ".read": 
      "root.child(auth.uid).booksOwned.child($book_id).exists()" 
     } 
     } 
    } 
    } 
} 

因此,要訪問一個特定的書(由$book_id表示),我們檢查用戶booksOwned節點中是否存在該書籍ID。

+0

謝謝。我對這些限制是如何工作的相當熟悉,但我不確定安全性如何獲得並將「booksOwned」數據保存到Firebase。對於服務器端應用程序,這通常很容易,因爲用戶無法訪問服務器端代碼,但我不確定如何繼續使用Firebase(客戶端應用程序)。 –

+0

我可能會這樣做「服務器端」的過程。但請不要高估這有多困難:如果您堅持使用JavaScript,您只需編寫一個單獨的腳本,使用硬編碼憑據或Firebase儀表板中的祕密。您可以在node.js中運行該腳本,甚至可以在家用臺式機上的瀏覽器選項卡中運行該腳本。它不像在服務器上運行那麼有彈性,但在開發過程中會完成同樣的事情。 –

+0

謝謝,弗蘭克!服務器端似乎是在這種情況下要走的路。 –