【问题标题】:ExpressJS and Firebase Auth, beginner queriesExpressJS 和 Firebase Auth,初学者查询
【发布时间】:2026-01-25 01:15:02
【问题描述】:

我正在尝试学习 ExpressJS,所以我创建了一个具有登录功能的简单网站... 我想将 Firebase 用于帐户和数据库(Firestore)

我的问题是,Firebase Auth 似乎只是客户端,后端不知道客户端是否登录...... 如果他没有登录,我想限制呈现给客户端的 HTML,但我不知道如何检查他是否登录

我知道我可以使用

firebase.auth().onAuthStateChanged(function(user){
  if (!user){
    window.location.replace("/login");
}});

在客户端,这对我来说看起来不够“安全”,我想在 ExpressJS 中做到这一点

在 firebase 文档中我发现了这个关于 Verifying ID Tokens 但我首先不明白如何将令牌发送到 ExpressJS,其次,在发出对路由的请求之前如何发送它......

【问题讨论】:

    标签: express login firebase-authentication login-control


    【解决方案1】:

    您必须将 ID 令牌传递给您的后端。然后按照https://firebase.google.com/docs/auth/admin/verify-id-tokens#retrieve_id_tokens_on_clients 中的说明验证 ID 令牌。

    如果您的应用程序是单页应用程序,则每次发送请求时,您都会在请求标头中传递 ID 令牌。

    如果您正在构建一个更传统的 Web 应用程序,您可以通过 cookie 设置 ID 令牌并检索它并在每次请求时检查您的后端。您必须执行以下操作:

    1. 在令牌过期之前通过调用getIdToken(true) 主动刷新 ID 令牌。令牌通常持续一个小时。您需要在到期前刷新它并更新 cookie,以便重定向仍会考虑用户已登录。

    2. 如果用户在一段时间后(超过一个小时)访问您的网站,cookie 将过期,您将重定向到您设置 onAuthStateChanged 的临时页面,如果用户已登录,请致电getIdToken(),更新 cookie 并重定向到预期的目的地,否则认为用户已退出。

    【讨论】: