当前位置: 首页 > 知识库问答 >
问题:

Firebase:如果我使用服务器端会话cookie,我如何获取客户端登录用户的ID令牌?

羊时铭
2023-03-14

我正在使用Firebase云功能与Express和Firebase托管来为我的多页面站点服务。我已经成功地实现了服务器端cookie,如下文所述:

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)访问Firebase 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呢?

有没有一种方法可以从我的会话cookie中以某种方式外推它,并将它作为变量从我的云函数传递给我的客户机?

或者有没有另一种方法从哲学的角度来看待这一点,而我忽略了这一点?

共有1个答案

商骞仕
2023-03-14

使用onauthStateChanged()可以监听用户登录状态更改,使用onIdTokenChanged()也可以监听用户ID令牌更改。只有当附加的观察者显示出现了新的令牌时(例如,当SDK每小时刷新一次令牌时),才需要使用新的令牌。

 类似资料:
  • 问题内容: 我想在学习活动中构建一个简单的Web应用程序。如果遇到首次访问者,Webapp应该要求用户输入他们的email_id,否则它会通过cookie记住用户并自动登录以执行功能。 这是我第一次创建基于用户的Web应用程序。我心中有一个蓝图,但是我无法弄清楚如何实现它。首先,我对收集用户cookie的方式感到困惑。我研究了各种教程和flask_login,但是与flask_login所实现的相

  • 在调用writeAndFlush()之后,我不知道如何从服务器检索响应;我该怎么办? 我也使用Netty 4.0.18.final

  • 我已经在本地机器中配置了minikube,并打算在外部使用kubernetes。我在kubernetes中创建了一个服务帐户,使用它的秘密,我可以使用下面的命令获得访问令牌。 我正在以贝娄启动配置。 我能知道如何使用fabric8 java客户端获得上面描述的serviceAccountAccessToken吗?

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 问题内容: 我没有前端。我希望用户将我的API(例如,(邮递员))与基本身份验证标头(电子邮件:密码)一起使用,然后使用此标头可以从firebase获取用户数据。 但是我找不到验证实际用户的方法吗? 我已经使用以下命令正确连接到数据库 我试图研究这些方法: 但是我看不到从服务器登录用户的选项… 从nodejs服务器似乎非常容易…例如 java /中是否存在此方法?如何在Java中针对服务器且没有客

  • 我想使用证书凭据将文件上载到s3。是否可以使用certifcate获取s3 bucket的客户机对象? 最初,我尝试使用下面的命令上传一个文件, 现在,我不想使用ACCESS_KEY | SECRET_KEY来创建客户机对象,因为它正在边缘设备上运行。相反,我已经生成了证书(IOT)。我想使用此证书创建客户端对象。因此,最后我有了临时访问权|密钥|秘密|会话|令牌。我想传递这些临时凭据以创建客户端