0

我正在嘗試使用Firebase的雲端函數來提供內容,並且希望檢測用戶是否已登錄。我已經在我的firebase.json中設置瞭如下所示的重寫:Firebase設置重寫以將當前用戶傳遞給雲端函數

{ 
    "database": { 
    "rules": "database.rules.json" 
    }, 
    "hosting": { 
    "public": "public", 
    "rewrites": [{ 
     "source": "**", 
     "function": "getProfile" 
    }] 
    } 
} 

這很好,我正在根據請求的路徑提供適當的內容。但是,由於我沒有在客戶端做任何事情(即我正在使用重寫而不是客戶端重定向),我錯過了從客戶端腳本獲取當前用戶的機會。

是否有某種方式可以使用請求對象的頭或屬性,以便我可以在服務器端重寫場景中提供不同的內容登錄和未登錄的用戶?

+1

從本示例開始 - 它可能會讓您開始一些想法。 https://github.com/firebase/functions-samples/tree/master/authenticated-json-api –

+0

@DougStevenson感謝您的回饋。我正在瀏覽該回購協議,並看到'req.headers.authorization.startsWith('Bearer')'代碼...看起來很有前途 - 謝謝! – James

+0

是的,授權標頭用於包含Firebase身份驗證令牌,然後在功能端對其進行驗證。 –

回答

1

當Firebase託管調用雲端函數時,會傳遞任何名爲__session的Cookie。一個簡單的方法做,這是在你的web應用程序只是監聽ID令牌,並適當設置Cookie:

firebase.auth().onIdTokenChanged(user => { 
    if (user) { 
    user.getIdToken().then(token => { 
     document.cookie = `__session=${token};max-age=3600`; 
    }); 
    } else { 
    document.cookie = '__session=;max-age=0'; 
    } 
}); 

然後,在你的雲功能,您可以分析在ID標記出來的cookie和驗證使用代碼like in this sample

+0

謝謝Michael - 所以如果我在用戶登錄時設置cookie,將來所有的請求,包括那些重寫到雲端功能的端點,都會傳遞給cookie(直到它到期)?即我無需做任何事情便於在每個請求的客戶端傳遞cookie。 – James

+1

正確,瀏覽器會自動傳遞Cookie。然而,ID令牌只持續1小時,這就是爲什麼過期時間設置爲一小時,並且我們正在監聽'onIdTokenChanged'(當id令牌刷新時觸發)。 –

+0

謝謝...我會對它進行編碼,看看它是否按我所希望的那樣工作。 – James

相關問題