Passport.js - 将数据发送回react / redux app,同时在登录后重定向

时间:2017-09-28 03:00:42

标签: javascript node.js reactjs redux passport.js

我正在创建一个React / Redux应用程序,并且不熟悉使用Passport设置Node / Express和身份验证的后端。我想要发生的是用户登录,检查凭据,如果从数据库中找到用户,将用户重定向到下一页并返回用户的信息,以便我可以更新reducer。 / p>

我的登录端点按照我认为的方式工作,因为我能够访问req.user对象并在成功验证后返回正确的用户信息。我被困的地方是将用户重定向到另一个页面,同时也传递该用户的信息,以便我可以更新redux商店。

编辑:所以我通过在身份验证后发送用户信息以及重定向用户的下一个路由来更新响应。由于我使用redux,我执行登录操作,并在获得响应后,使用window.location重定向用户。这部分解决了我的问题,即使我在登录后重定向,我相信在更新window.location后,我的redux存储得到刷新,我丢失了我抓住服务器端的任何信息。

app.post('/api/login', passport.authenticate('local-login', { failureRedirect: '/login'}), (req, res) => {
    res.json({
  redirect: '/profile
  userInfo: req.user.dataValues})
  })
})

export const login = (email, password) => {
  return(dispatch) => {
    axios
    .post('/api/login', {
        email: email,
        password: password
    })
    .then(resp => {
      dispatch({
        type: 'LOGIN_USER',
        data: resp.data
      })
      window.location = resp.data.redirect
    })
    .catch(errors => {
      console.log(erros)
    })
  }
}

1 个答案:

答案 0 :(得分:0)

您正在丢失状态,因为您正在使用window.location = resp.data.redirect强制重新加载页面。您应该在您的应用程序中使用路由器来进行URL更改(例如react-router-dom)。您可以使用pushState(或者hashRouting?)以编程方式更改URL,而不是重定向您当前的方式。