【问题标题】:Auto refreshing firebase authentication without a window reload?无需重新加载窗口即可自动刷新 Firebase 身份验证?
【发布时间】: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


    【解决方案1】:

    onAuthStateChanged 仅在用户的身份验证状态更改时触发,因此在他们登录或注销时触发。

    如果您想获取 ID 令牌的更新,请收听 onIdTokenChanged event

    【讨论】:

      最近更新 更多