Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session Firebase 3.x-令牌/会话过期_Session_Firebase_Token_Firebase Authentication - Fatal编程技术网

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

Session Firebase 3.x-令牌/会话过期,session,firebase,token,firebase-authentication,Session,Firebase,Token,Firebase Authentication,有人知道令牌需要多长时间才能过期吗?现在没有选项在控制台上设置令牌有效性 在最新版本的Firebase身份验证中,登录会话不再过期。取而代之的是,它结合使用长寿命帐户令牌和短命、自动刷新的访问令牌,以充分利用这两个世界 如果您想结束用户的会话,您可以呼叫。它确实会过期。登录一小时后,令牌id将过期。如果您尝试验证sdk是否返回错误“错误:Firebase ID令牌已过期。请从客户端应用获取新令牌,然后重试。有关如何检索ID令牌的详细信息,请参阅。” 是否有这样一种方法可以将过期时间更改为Fire

有人知道令牌需要多长时间才能过期吗?现在没有选项在控制台上设置令牌有效性

在最新版本的Firebase身份验证中,登录会话不再过期。取而代之的是,它结合使用长寿命帐户令牌和短命、自动刷新的访问令牌,以充分利用这两个世界


如果您想结束用户的会话,您可以呼叫。

它确实会过期。登录一小时后,令牌id将过期。如果您尝试验证sdk是否返回错误“错误:Firebase ID令牌已过期。请从客户端应用获取新令牌,然后重试。有关如何检索ID令牌的详细信息,请参阅。”

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


任何知道这到底是怎么回事的人。

对于那些仍然困惑不解的人来说,这就是一切

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


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

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

firebase.auth().onAuthStateChanged(异步用户=>{
如果(用户){
const lastSignInTime=新日期(user.metadata.lastSignInTime);
const lastsignintimestamp=Math.round(lastSignInTime.getTime()/1000);
const yesterdayTimeStamp=Math.round(new Date().getTime()/1000)-(24*3600);
if(LastSignInTimeStamp
我的令牌每一小时过期一次,我在firebase控制台中添加了SHA-1,我将令牌发送到我的自定义服务器进行验证。有谁能帮我解释一下为什么我的到期时间只有一个小时。看起来这又变了,现在代币确实过了一段时间就到期了。这没有变。登录会话不会过期。但是短期代币(我认为它们被称为ID代币)的有效期只有一个小时。当您使用Firebase SDK时,它会自动刷新那些短期令牌。由于ID令牌每小时过期一次,我们如何使用它们向自定义服务器进行身份验证?我按照有关如何在我的服务器上运行的说明进行了操作,但现在服务器仅在一小时后就无法识别登录的用户。选项1:如果令牌无效,则进行响应截获并刷新令牌,然后重新生成API调用。有没有解决方案遇到此问题?您可以始终使用
currentUser.getIdToken()
但我的问题是,这会返回一个承诺:-/I不想在我的请求拦截器中执行异步操作…@problemsofsofsumit您可以将布尔值“false”作为参数传递给getIdToken以使其同步。