gpt4 book ai didi

node.js - 无需重新加载窗口即可自动刷新 Firebase 身份验证?

转载 作者:行者123 更新时间:2023-12-04 07:37:35 25 4
gpt4 key购买 nike

我试图弄清楚为什么我的 JWT 不断过期并且刷新似乎不起作用,这是我处理此问题的代码的关键:

React.useEffect(() => {
firebase.auth().onAuthStateChanged(async (auth) => {
if (auth) {
const token = await auth.getIdToken();
setToken(token)
nookies.destroy({}, "token");
nookies.set({}, "token", token, {
path: "/"
});

setAuth(auth);

const val = jwt_decode(token) as any;
const exp = Number(val.exp);

let timeToExpiry = moment(exp * 1000 - 1000 * 5).diff(moment());
const updateToken = () => {
setTimeout(async () => {
console.log("REFRESHING TOKEN");
await firebase.auth().currentUser.getIdToken(true).then(c => {
setToken(c);
const val = jwt_decode(c) as any;
const exp = Number(val.exp);
timeToExpiry = moment(exp * 1000 - 1000 * 5).diff(moment());
//alert("refreshing " + timeToExpiry);
//console.log(timeToExpiry + " DONE REFRESHING TOKEN");
updateToken();
});
}, timeToExpiry)
}
updateToken();
}
else {
setToken("");
nookies.destroy({}, "token");
setAuth(null);

var provider = new firebase.auth.GoogleAuthProvider();
provider.setCustomParameters({
prompt: 'select_account'
});

firebase.auth().signInWithRedirect(provider);
}
})
}, [])
超时有效,它在到期前调用 getIdToken() 但是下一个请求仍然出错,JWT token 已过期,需要我刷新实际修复它的窗口。
有没有办法让这些 token 在不刷新窗口的情况下刷新?

最佳答案

onAuthStateChanged仅在用户的身份验证状态更改时触发,因此在他们登录或注销时触发。
如果您想获取 ID token 的更新,请收听 onIdTokenChanged event .

关于node.js - 无需重新加载窗口即可自动刷新 Firebase 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67656161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com