我正在开展一个非常不重要的项目。因此,我希望在身份验证意义上获得最佳用户体验:登录一次并永久登录。
我设法让firebase身份验证正常运行。但是令牌在一小时后到期。
我读到刷新令牌永不过期。 (参见here)因此我想把它放在本地存储中并用它来检索一个新的访问令牌。这是对的吗?
如果是这种情况:为什么没有
this.afAuth.auth.getTokenWithRefreshToken()
我需要使用
吗?this.afAuth.auth.signInWithCustomToken(MyRefreshTokenFromLocalStorage)
这个功能?
将持久性设置为LOCAL实际上做了什么?在docs中,它表示您将永久登录(即使浏览器已关闭并重新打开),但事实并非如此? “这包括指定登录用户是否应该在显式注销之前无限期保留,在窗口关闭时清除或在页面重新加载时清除的能力。” (firebase docs)
我尝试了很多东西,包括第三方授权提供商,但我不知道它是否无效或者我是否不够聪明。因此,如果有人能给我一个可行的方向,我可以集中精力和错误,我会非常高兴。
答案 0 :(得分:0)
您需要自己检索刷新令牌。 User.prototype.getIdToken将检查令牌是否过期,如果否,则返回令牌,否则,它使用刷新令牌为您交换新的ID令牌。
对于持久性,这里有一个文档:https://firebase.google.com/docs/auth/web/auth-state-persistence
Local基本上意味着登录状态会持续存在,直到您明确退出,并且状态会持续显示在标签页上。
答案 1 :(得分:0)
firebase.auth.Auth.Persistence.LOCAL
'local'表示即使关闭浏览器窗口或在React Native中破坏了活动,状态仍将保留。需要明确注销才能清除该状态。请注意,Firebase Auth Web会话是单个主机来源的,并且只会在单个域中保留。
firebase.auth.Auth.Persistence.SESSION
'session'指示状态将仅在当前会话或选项卡中保持不变,并且在关闭用户经过身份验证的选项卡或窗口时将被清除。仅适用于网络应用。
firebase.auth.Auth.Persistence.NONE
“无”表示状态仅存储在内存中,并且在刷新窗口或活动时将清除状态。