首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Firebase和自定义服务器实现长期单点登录?

如何使用Firebase和自定义服务器实现长期单点登录?
EN

Stack Overflow用户
提问于 2017-06-30 14:44:03
回答 2查看 906关注 0票数 2

我有一个服务器端渲染的应用程序,也可以与Firebase通信。当用户登录时,客户机从firebase获得一个ID令牌,然后我将其与服务器共享,如documentation中所述。我的服务器将ID令牌存储在cookie中,这样客户端将在所有请求中包含该令牌,并且我的服务器可以检查用户是否已登录。

问题是,当Firebase在一个小时后刷新令牌时,我的服务器无法验证令牌id,并将它们重定向到登录页面。然后,客户端加载并从Firebase获取刷新后的令牌,并将其存储在服务器cookie中,之后我的服务器将再次正确地验证请求。

我可以让客户端在每次请求时刷新令牌,但当用户离开我的站点并在一个小时后返回时,问题仍然会发生。

如何设置我的应用程序,以便我的服务器在firebase令牌过期后正确地对用户进行身份验证?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-02 14:04:34

因此,您需要在令牌过期之前(每小时)主动刷新令牌。当令牌被刷新时,您可以将其发送到您的服务器,对其进行验证,并将其设置为与ID令牌具有相同生存期的会话cookie。您也可以立即从客户端将其设置为cookie (如果您没有使用仅限http的cookie)。

您的服务器将在每次请求时收到此cookie,请在返回受限制的资源之前对其进行验证。

我假设你已经意识到了这一点。如果用户超过一个小时没有访问你的网站,问题就会发生。在这种情况下,您的服务器将认为该用户已注销。下面是你需要做的:

用户尝试访问/myCart,它在cookie过期时显示他们的购物车。您的服务器检测不到cookie并重定向到一个临时页面: / redirect ?continue=/myCart在该页面上设置一个onIdTokenChanged或onAuthStateChanged,一旦它使用最新的ID令牌触发,您就将其另存为会话cookie并重定向到/myCart。否则,您认为用户已注销并重定向到登录页面。

票数 0
EN

Stack Overflow用户

发布于 2017-07-04 03:59:43

如果我理解正确的话,您希望以编程方式保持用户“登录”,直到他/她退出会话或注销-没有令牌签名他/她退出。

我也面临着同样的问题。我认为最好的方法是使用Firebase.auth.onAuthStateChanged。

您在前端客户端具有该功能。

让我们看一下下面的例子:

假设用户在www.domain.com/myaccount页面上。他/她在该url上活动。他/她使用该网站已经过去了一个小时(他/她仍然在积极使用它)。你想要的是在用户端拥有firebase.auth.onAuthStateChanged。一旦该小时过去,该函数立即被触发,然后您可以(在该函数内)从您的服务器请求一个新的令牌,并立即将其发送回来,而用户永远不会知道该令牌已被交换。(我建议通过AJAX完成此操作)。

我希望这能回答你的问题。如果由于某种原因,onAuthStateChanged不能与您的应用程序一起工作,您可以尝试onIdTokenChanged。请参阅下面的链接。

https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onAuthStateChanged

https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onIdTokenChanged

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44840196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档