繁体   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