Javascript 使用PassportJS、Express和Axios实施React保护路由

Javascript 使用PassportJS、Express和Axios实施React保护路由,javascript,node.js,reactjs,express,passport.js,Javascript,Node.js,Reactjs,Express,Passport.js,我正在尝试在MERN stack应用程序中实现一个登录系统。一切正常,但我无法实现受保护的路由 后端服务器在端口5000上,前端在端口3000上 这是我获取保存在passport会话中的用户数据的地方: //登录成功后,检索用户信息 路由器.get(“/login/success)”,(请求、回复)=>{ if(passport.session.user) { res.send({user:passport.session.user}); } }); 路由器.get(“/login/redir

我正在尝试在MERN stack应用程序中实现一个登录系统。一切正常,但我无法实现受保护的路由

后端服务器在端口5000上,前端在端口3000上

这是我获取保存在passport会话中的用户数据的地方:


//登录成功后,检索用户信息
路由器.get(“/login/success)”,(请求、回复)=>{
if(passport.session.user)
{
res.send({user:passport.session.user});
}
});
路由器.get(“/login/redirect”,(req,res)=>{
res.redirect(“http://localhost:3000/dashboard");
}
);
router.get(“/google”,
authenticate('google',{scope:['profile','email']});
router.get(“/google/callback”,
passport.authenticate('google'{
failureRedirect:“/auth/login/failed”,
successRedirect:“/auth/login/redirect”,
failureFlash:“登录时出错”
}));
下面是我如何从后端到前端获取数据,以及我实现受保护路由组件的方式


componentDidMount(){
这是。_fetchUserData()
}
_fetchUserData()
{
axios.get(“http://localhost:5000/auth/login/success")
。然后(响应=>{
if(response.data.user.id)
这是我的国家({
真的吗
})
})
}
render(){
返回(
{this.state.authenticated.toString()}

); } const privaterout=({component:component,isLoggedIn:isLoggedIn,…rest})=>( ( isLoggedIn==真 ? () : () )} /> )
这是我在登录组件中拥有的(它应该将我重定向到window.location中的登录链接)


componentDidMount()
{
console.log(this.props.isAuth)
if(this.props.isAuth==false)
{
log('redirect');
window.location=”http://localhost:5000/auth/google"
}
}
即使用户经过身份验证,它也会无限地将我重定向到登录页面。我认为这是因为axios是异步的,它不能及时获取用户数据,但我找不到解决方案