繁体   English   中英

在没有 window 重新加载的情况下自动刷新 firebase 身份验证?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM