[英]Auto refreshing firebase authentication without a window reload?
我试图弄清楚为什么我的 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 令牌已过期,需要我刷新实际修复它的 window。
有没有办法让这些令牌刷新而不刷新 window?
onAuthStateChanged
仅在用户的身份验证 state 更改时触发,因此当他们登录或注销时。
如果您想获取 ID 令牌的更新,请监听onIdTokenChanged
事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.