Firebase 3.x - 令牌/会话过期

shi*_*poo 37 session token firebase firebase-authentication

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

Fra*_*len 45

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

如果要结束用户的会话,可以拨打电话signOut().

  • 这没有改变.登录会话不会过期.但是短命令牌(我认为它们被称为ID令牌)只有一个小时有效.使用Firebase SDK时,它会自动刷新这些短期令牌. (8认同)
  • 由于ID令牌每小时过期一次,我们如何使用它们对自定义服务器进行身份验证?我在服务器上按照了如何[验证ID令牌](https://firebase.google.com/docs/auth/admin/verify-id-tokens)的说明,但现在服务器无法识别已登录用户只用了一个小时就过去了. (3认同)
  • 我的令牌每隔一小时就会过期,我已在 firebase 控制台中添加了 SHA-1,我将令牌发送到我的自定义服务器进行验证。谁能帮我解释为什么我的有效期只有一小时。 (2认同)
  • 选项1:如果令牌无效并重新进行API调用,则进行响应拦截并刷新令牌。 (2认同)

Mig*_*ero 24

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

是否有这种方法可以将到期时间更改为Firebase令牌,而不是自定义令牌.

知道这是如何工作的任何人.


Dev*_*ike 6

对于任何仍然感到困惑的人,这里都非常详细地解释了

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

  • 令牌在一小时后仍然过期,这并不能解决问题 (5认同)

小智 6

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

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
        });
      }
    })

Run Code Online (Sandbox Code Playgroud)