【问题标题】:Firebase 3.x - Token / Session ExpirationFirebase 3.x - 令牌/会话过期
【发布时间】:2016-09-26 00:25:51
【问题描述】:

有谁知道令牌过期需要多长时间?现在没有选项可以在控制台上设置令牌有效性。

【问题讨论】:

    标签: session firebase token firebase-authentication


    【解决方案1】:

    在最新版本的 Firebase 身份验证中,登录会话不再过期。相反,它结合使用长期帐户令牌和短期、自动刷新的访问令牌,以实现两全其美。

    如果您想结束用户的会话,可以拨打signOut()

    【讨论】:

    • 我的令牌每隔一小时过期一次,我在 firebase 控制台中添加了 SHA-1,我将令牌发送到我的自定义服务器进行验证。谁能帮助我为什么我的到期时间只有一小时。
    • 这似乎又变了,现在令牌确实会在一段时间后过期。
    • 这没有改变。登录会话不会过期。但是短期令牌(我认为它们被称为 ID 令牌)仅在一个小时内有效。当您使用 Firebase SDK 时,它会自动刷新这些短期令牌。
    • 由于 ID 令牌每小时过期一次,我们如何使用它们与自定义服务器进行身份验证?我按照关于如何在我的服务器上verify id tokens 的说明进行操作,但现在服务器在一个小时过去后就无法识别登录用户。
    • 选项1:如果令牌无效,则拦截响应并刷新令牌并重新进行API调用。
    【解决方案2】:

    它确实过期了。登录一小时后,令牌 ID 到期。如果您尝试验证 sdk 返回错误“错误:Firebase ID 令牌已过期。从您的客户端应用获取新令牌并重试。有关如何检索 ID 令牌的详细信息,请参阅 https://firebase.google.com/docs/auth/server/verify-id-tokens。”

    有没有办法将过期时间更改为 Firebase 令牌,而不是自定义令牌。

    任何知道这实际上是如何工作的人。

    【讨论】:

    • 有遇到此问题的解决方案吗?
    • 你总是可以使用currentUser.getIdToken(),但我的问题是这会返回一个承诺:-/我不想在我的请求拦截器中做异步的东西......
    • @ProblemsOfSumit 您可以将布尔值“false”作为参数传递给 getIdToken 以使其同步。
    【解决方案3】:

    对于还在迷茫的人,全是explained in great detail here

    如果您的应用包含自定义后端服务器,则 ID 令牌可以而且应该 用于与它进行安全通信。而不是发送请求 使用用户的原始 uid,很容易被恶意软件欺骗 客户端,发送可以通过 Firebase 验证的用户 ID 令牌 Admin SDK(如果 Firebase 没有,甚至是第三方 JWT 库) 使用您选择的语言的 Admin SDK)。为了促进这一点, 现代客户端 SDK 提供了检索 ID 令牌的便捷方法 对于当前登录的用户。 Admin SDK 确保 ID 令牌 有效并返回解码后的令牌,其中包括 它所属的用户以及添加到它的任何自定义声明。

    【讨论】:

    • 令牌在一小时后仍然过期,这并不能解决问题
    【解决方案4】:

    如果上面的答案仍然让你感到困惑, 这就是我所做的:

    firebase.auth().onAuthStateChanged(async user => {
        if (user) {
            const lastSignInTime = new Date(user.metadata.lastSignInTime);
            const lastSignInTimeTimeStamp = Math.round(lastSignInTime.getTime() / 1000);
            const yesterdayTimeStamp = Math.round(new Date().getTime() / 1000) - (24 * 3600);
            if(lastSignInTimeTimeStamp < yesterdayTimeStamp){
              await firebase.auth().signOut()
              this.setState({
                loggedIn: false
              });
              return false;
            }
            this.setState({
              loggedIn: true,
              user
            });
          }
        })
    
    

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2019-12-11
      • 1970-01-01
      • 2017-10-19
      • 2021-09-07
      • 2010-12-04
      • 1970-01-01
      • 2018-05-27
      • 2021-01-05
      相关资源
      最近更新 更多