【发布时间】:2021-08-11 19:40:29
【问题描述】:
我正在尝试找出为什么我的 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 令牌已过期,需要我刷新实际修复它的窗口。
有没有办法让这些令牌在不刷新窗口的情况下刷新?
【问题讨论】:
标签: node.js reactjs firebase firebase-authentication