簡體   English   中英

Firebase:如果我使用服務器端 session cookies,如何在客戶端獲取登錄用戶的 ID 令牌?

[英]Firebase: How do I get the ID Token for a signed-in user on the client side if I am using server-side session cookies?

我正在使用帶有 Express 和 Firebase 托管的 Firebase 雲功能來為我的多頁站點提供服務。 我已經成功實現了服務器端 cookies,如此處所述並如下實現:

function verifyLogin(request, response, next) {
    const sessionCookie = request.cookies.__session || '';
    firebase.auth().verifySessionCookie(sessionCookie, true /** checkRevoked */ )
        .then((decodedClaims) => {
            //serve content for user
            return next();
        }).catch(error => {
            // Session cookie is unavailable or invalid. Force user to log in.
            console.log(error);
            response.redirect('/login');
            return;
        });
}

app.get('/', verifyLogin, (request, response) => {
    var page_title = "Home";
    response.render('index', {
        page_title,
    });
});

我正在使用 Firebase Web SDK (JavaScript) 訪問 Z035489FF8D092741943E4 Cloud Firestore。 為此,我需要在客戶端獲取當前登錄用戶的 idToken,如下所示:

firebase.auth().onAuthStateChanged(firebaseUser => {
    if (firebaseUser) {
        firebase.auth().currentUser.getIdTokenResult()
            .then((idTokenResult) => {
                 // Access the Firebase Cloud Firestore here
            });
    }
});

這對我來說似乎是多余的,因為我已經知道哪個用戶是通過我的服務器 cookie 登錄的,但是如果不再次調用 Firebase Auth,我還能如何獲得 idToken?

有沒有辦法以某種方式從我的 session cookie 中推斷出來,並將其從我的雲 function 作為變量傳遞給我的客戶端?

還是有另一種我忽略的哲學方式來看待這個問題?

同樣,您可以使用onAuthStateChanged()監聽用戶登錄 state 更改,也可以使用onIdTokenChanged () 監聽用戶 ID 令牌更改。 僅當您附加的觀察者顯示出現新令牌時(例如,當 SDK 每小時刷新一次時),您才需要使用新令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM