我正在尝试学习ExpressJS,所以我创建了一个具有登录功能的简单网站... 我想将Firebase用于帐户和数据库(Firestore)
我的问题是,Firebase 身份验证似乎只是客户端,后端不知道客户端是否已登录...... 如果客户端未登录,我想限制呈现给客户端的 HTML,但我无法弄清楚如何检查他是否已登录
我知道我可以使用
firebase.auth().onAuthStateChanged(function(user){
if (!user){
window.location.replace("/login");
}});
在客户端,这对我来说看起来不够"安全",我想在 ExpressJS 中做到这一点
在Firebase文档中,我发现了有关验证ID令牌的内容 但我不明白首先我将如何将令牌发送到 ExpressJS,其次,在向路由发出请求之前我将如何发送它......
您必须将 ID 令牌传递给后端。然后,按照 https://firebase.google.com/docs/auth/admin/verify-id-tokens#retrieve_id_tokens_on_clients 中所述验证 ID 令牌。
如果应用程序是每次发送请求时的单页应用,则在请求标头中传递 ID 令牌。
如果要构建更传统的 Web 应用,可以通过 cookie 设置 ID 令牌并检索它,并在每个请求时在后端签入。您必须执行以下操作:
-
通过在令牌过期之前调用
getIdToken(true)
来主动刷新 ID 令牌。令牌通常持续一个小时。您需要在过期前刷新它并更新 Cookie,以便重定向仍会考虑用户登录。 -
如果用户在一段时间后(超过一个小时)访问您的网站,cookie 将过期,您将重定向到您设置
onAuthStateChanged
的临时页面,如果用户已登录,请拨打getIdToken()
,更新 cookie 并重定向到预期目的地,否则考虑用户已注销。