ExpressJS和Firebase Auth,初学者查询

时间:2017-12-18 11:34:09

标签: express login firebase-authentication login-control

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

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

我知道我可以使用

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

在客户端,看起来没有"安全"对我来说足够了,我想在ExpressJS中做到这一点

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

1 个答案:

答案 0 :(得分:0)

您必须将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并重定向到预定目的地,否则请考虑退出用户。