javascript - Passport.js - 将数据发送回react/redux应用程序,同时在登录后重定向

标签 javascript node.js reactjs redux passport.js

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

我的登录端点按照我的想法工作,因为我能够访问 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)
    })
  }
}

最佳答案

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

关于javascript - Passport.js - 将数据发送回react/redux应用程序,同时在登录后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46460272/

相关文章:

javascript - 在鼠标悬停时添加事件,如何仅添加一次事件?

javascript - 如何从TD Id中获取RowID(TR id)

javascript - 构造函数的 __proto__ 属性指向什么?

node.js - socket.io 客户端在 native react 中接收对同一事件的多次调用

javascript - 将 react-redux 与基于事件的第 3 方库一起使用的最佳方式是什么

css - React - 使用样式渲染 <Link>

javascript - 如何使用按钮在 2 个 html 页面之间传递数据

javascript - 如何在 NodeJS createServer 中调用模块函数

node.js - 如何使用npm同步在node.js中的变量中返回回调

CSS 高度转换 - chrome 中的错误方向