2017-12-18 298 views
0

我努力学习ExpressJS,所以我创建一个简单的网站,登录功能... 我想用火力地堡的帐户和数据库(公司的FireStore)ExpressJS和火力地堡验证,初学者查询

我的问题是Firebase身份验证似乎只是客户端,后端不知道客户端是否已登录或不登录... 我想限制HTML呈现给客户端,如果他没有登录,但我可以'吨弄清楚如何检查他是否登录

我知道我可以使用

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

,看起来不“安全”,足以给我,我想这样做在ExpressJS

在火力的文档,我发现这个约Verifying ID Tokens ,但我不明白,首先是我将如何将令牌发送给ExpressJS,其次,我如何在请求路由前发送它?

回答

0

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

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

如果您正在构建更传统的Web应用程序,您可以通过Cookie设置ID令牌并检索它并在每个请求后在您的后端签入。你必须做到以下几点:

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

  2. 如果用户在一段时间后(超过一小时)访问您的网站,该Cookie将会过期,您将重定向到您设置onAuthStateChanged的临时页面,如果用户已登录,请致电getIdToken(),更新cookie并重定向到预定目标,否则请考虑用户已注销。