2017-04-26 35 views
1

據以設定用戶的UID和數據庫等身份驗證信息Allowing write access only to Cloud Functions for Firebase掌管你的功能應該是這樣的:獲取或設置雲功能的火力地堡UID在數據庫規則中使用

var functions = require('firebase-functions'); 
var admin = require('firebase-admin'); 

exports.foo = functions.database.ref('/bar') 
    .onWrite(event => { 
    var firebaseConfig = functions.config().firebase; 
    firebaseConfig.databaseAuthVariableOverride = { 
    uid: 'some-uid', 
    foo: true, 
    bar: false 
    }; 
    admin.initializeApp(firebaseConfig); 
    ... 
} 

但是,當我們在我們的函數中運行此代碼,我們得到以下錯誤:

The default Firebase app already exists. This means you called initializeApp() more than once without providing an app name as the second argument. In most cases you only need to call initializeApp() once. But if you do want to initialize multiple apps, pass a second argument to initializeApp() to give each app a unique name. 

那麼這段代碼有什麼問題?這是設置uid的正確方法嗎?還是有一個(未)記錄的功能uid或其他方式來設置一個規則,只允許從雲功能寫入?

更新 - 解決

我們拿到的這款解決了,問題是,參考答案是(我猜)爲谷歌雲功能,我們正在編寫一個雲功能的火力地堡

在用於火力地堡雲功能,event.dataDeltaSnapshot對象具有refadminRef性質。 ref與觸發事件的用戶具有相同的訪問權限,而adminRef具有不受限制的讀/寫權限。因此,爲了僅允許函數寫入路徑,必須在規則中拒絕寫入操作,並且函數必須使用adminRef來寫入。

由於對Some Firebase security rules apply for admin in Cloud FunctionsGoogle documentation for DeltaSnapshot給出的回答 解決了這個問題。

回答

1

我們拿到的這款解決了,問題是,參考答案是(我猜)爲谷歌雲功能,我們正在編寫一個火力地堡功能

在火力地堡功能event.dataDeltaSnapshot對象具有refadminRef性質。 ref與觸發事件的用戶具有相同的訪問權限,而adminRef具有不受限制的讀/寫權限。因此,爲了僅允許函數寫入路徑,必須在規則中拒絕寫入操作,並且函數必須使用adminRef來寫入。

由於對Some Firebase security rules apply for admin in Cloud FunctionsGoogle documentation for DeltaSnapshot給出的回答 解決了這個問題。