Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Javascript firebase.auth().onIdTokenChanged似乎没有刷新令牌_Javascript_Firebase_Firebase Authentication - Fatal编程技术网

Javascript firebase.auth().onIdTokenChanged似乎没有刷新令牌

Javascript firebase.auth().onIdTokenChanged似乎没有刷新令牌,javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,我正在开发一个使用Firebase进行身份验证的web应用程序。声明其id标记持续一小时,并且在某些事件中也会刷新。因此,按照说明,我正在使用以下方法刷新令牌: async function getFirebaseUserIdToken() { const idToken = await firebase.auth().currentUser.getIdToken(); window.localStorage.setItem('idToken', idToken); firebase

我正在开发一个使用Firebase进行身份验证的web应用程序。声明其id标记持续一小时,并且在某些事件中也会刷新。因此,按照说明,我正在使用以下方法刷新令牌:

async function getFirebaseUserIdToken() {
  const idToken = await firebase.auth().currentUser.getIdToken();
  window.localStorage.setItem('idToken', idToken);
  firebase.auth().onIdTokenChanged(async user => {
    if (user) {
      window.localStorage.setItem('idToken', await user.getIdToken());
    }
  });
  return idToken;
}
问题:似乎不起作用。我还是会被注销。在我看来,当令牌被刷新时,
onIdTokenChanged
似乎没有被调用。我不知道为什么

版本数据:

  • “firebase”:“^7.24.0”
  • “react firebaseui”:“^4.0.0”
  • “反应”:“^16.10.2”
  • “redux”:“^4.0.4”
  • “react redux”:“^7.1.3”

看起来您没有有效地使用
onIdTokenChanged
。回调只是将令牌保存到本地存储,而本地存储实际上对应用程序没有任何作用。您需要捕获该令牌,并在需要它的代码中实际使用它。将侦听器放在getter方法中并没有真正意义。@DougStevenson:它是本地存储中的令牌,我随每个API请求一起发送,以确保用户经过身份验证。因此,当我登录时,本地存储是令牌最初设置和使用的地方。但当它过期时,似乎不会使用firebase生成的任何新令牌刷新它。这有意义吗?嗯,我们看不到任何代码,所以您可能在那里做了一些错误的事情。无论如何,在getter中加入onIdTokenChanged没有多大意义,这是您希望在全球范围内建立的东西。我也不会费心把它写到商店。请将其保存在内存中。@DougStevenson:该函数在登录时只调用一次,然后所有api调用都从本地存储中获取idToken。我们期望观察器在令牌过期时被调用,并将新的idToken写入本地存储,以便下一个api调用将拥有它。但现在没有了。不知道为什么。仅供参考-我向您发送了一条咨询信息/请求。您似乎没有有效地使用
onIdTokenChanged
。回调只是将令牌保存到本地存储,而本地存储实际上对应用程序没有任何作用。您需要捕获该令牌,并在需要它的代码中实际使用它。将侦听器放在getter方法中并没有真正意义。@DougStevenson:它是本地存储中的令牌,我随每个API请求一起发送,以确保用户经过身份验证。因此,当我登录时,本地存储是令牌最初设置和使用的地方。但当它过期时,似乎不会使用firebase生成的任何新令牌刷新它。这有意义吗?嗯,我们看不到任何代码,所以您可能在那里做了一些错误的事情。无论如何,在getter中加入onIdTokenChanged没有多大意义,这是您希望在全球范围内建立的东西。我也不会费心把它写到商店。请将其保存在内存中。@DougStevenson:该函数在登录时只调用一次,然后所有api调用都从本地存储中获取idToken。我们期望观察器在令牌过期时被调用,并将新的idToken写入本地存储,以便下一个api调用将拥有它。但现在没有了。不知道为什么。仅供参考-我向您发送了咨询信息/请求。