我正在创建一个 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/