0

我正在制作一个反应和节点应用程序。我设法进行了登录和注册,但我有一个小问题。身份验证由 jwt 在本地存储中使用令牌进行管理。

我想要做的是显示我登录的用户的信息。所以,我用这个

const fetchUserData = async () => {
    try {
        const user = await API.getUser();
        setUser(user.data);
    } catch (err) {
        console.log(err);
    }
}
useEffect(() => {
    fetchUserData()
}, [])

getUser 函数只是一个 axios 调用:

getUser: function () {
    return axios.get(
        `/currentUser`,
        {
            headers: headers
        }
    )
}

由于我的中间件,连接到它的控制器返回了我的用户。

 app.get('/currentUser', auth, (req, res) => {
    User.findOne({_id: req.user.id}, function (err, user) {
        if (err) {
            res.send(err);
        }
        res.json(user);
    })
})

不幸的是,当我登录时,我可以看到我的令牌,但我所在州的用户仍然为空。

我在另一篇文章中看到,这是因为我的 useEffect 首先在安装组件时运行,并且没有很好地调用我的 getUser 函数。我认为我需要在我的 useEffect 的第二个参数中添加用户才能再次调用 useEffect 但它不会改变任何东西。

哦,我注意到登录后,如果我刷新页面,我的用户只会在我的状态下完成。

谢谢您的帮助

4

0 回答 0