Javascript firebase.auth().onIdTokenChanged似乎没有刷新令牌
我正在开发一个使用Firebase进行身份验证的web应用程序。声明其id标记持续一小时,并且在某些事件中也会刷新。因此,按照说明,我正在使用以下方法刷新令牌: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
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调用将拥有它。但现在没有了。不知道为什么。仅供参考-我向您发送了咨询信息/请求。