如何将用户重定向到注册后最后访问的页面



我正在构建一个电子商务网站,它非常复杂,有很多页面。我使用Node, Express和Passport。我在这个平台上遵循了一些答案,现在我使用connect-ensure-login将用户重定向到他们在被要求登录之前访问过的前一个页面。一切都很好,只是我想在注册路由上复制同样的东西。

这是我的登录路径:

router.post("/login", passport.authenticate('local', {
successReturnToOrRedirect: '/',
failureRedirect: '/login',
failureFlash: true
}), function (req, res) {
if (req.body.remember) {
req.session.cookie.maxAge = 30 * 24 * 60 * 60 * 1000;
} else {
req.session.cookie.expires = false;
}
});

这是我的注册路径:

router.post('/register', (req, res) => {
const {
firstname,
lastname,
email,
phone,
password,
password2
} = req.body;
let notifs = [];
//check if passwords match
if (password !== password2) {
notifs.push({
msg: "Passwords don't match"
});
req.flash('info', "Passwords don't match")
}
if (notifs.length > 0) {
res.render('signin', {
firstname: firstname,
lastname: lastname,
email: email,
phone: phone,
password: password,
password2: password2
})
} else {
//validation passed
User.findOne({
email: email
}).exec((err, user) => {
if (user) {
notifs.push({
msg: 'This email already exists'
});
req.flash('info', " This email already exists")
res.render('signin', {
notifs,
firstname,
lastname,
email,
phone,
password,
password2
})
} else {
const newUser = new User({
firstname: firstname,
lastname: lastname,
email: email,
phone: phone,
password: password
});
//hash password
bcrypt.genSalt(10, (err, salt) =>
bcrypt.hash(newUser.password, salt,
(err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser.save()
.then((value) => {
res.redirect('/')
})
.catch(value => console.log(value));
}));
}
})
}
})

我想要res.redirect到之前访问过的路由,而不是"/"注册后的路由,就像在登录路由中定义为successReturnToOrRedirect: '/'

注意:我已经试过了。它将我重定向到GET请求到"/register"路线

编辑:我还注意到用户注册后不会自动登录。我想这就是我无法重定向到请求页面的原因。请问我该如何解决这个问题?

我终于发现我做错了什么。它来自"/登记册"。路线。用户注册成功后,不自动登录。

为了解决这个问题,我重新使用了护照。用户注册后自动登录的认证方法。

下面是创建用户和散列密码后更新的注册码:

...
bcrypt.genSalt(10, (err, salt) =>
bcrypt.hash(newUser.password, salt,
(err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser.save()
.then((value) => {
passport.authenticate('local', {
successReturnToOrRedirect: '/',
failureRedirect: '/login',
failureFlash: true
})(req, res, function () {
req.session.cookie.maxAge = 30 * 24 * 60 * 60 * 1000;
})
})
.catch(value => console.log(value));
}));
...

最新更新