我正在编写一个网站,使用express和passport进行身份验证(以及mongodb作为数据库),我知道如何对用户进行身份验证以及如何限制某些页面,以便只有登录的用户才能访问它们。但我有一个问题我无法在任何地方找到答案:
如果用户尝试访问受限制的网页,并且发现用户未使用 req.isAuthenticated() 登录,则会将用户重定向到登录页面,然后当用户登录时将用户重定向到其个人资料页面。通常这很好,但在这种情况下,用户尝试访问另一个不是个人资料页面的受限制页面。
当他/她尝试登录但当他/她只是尝试访问受限制的页面时,我如何将用户重定向到个人资料页面,要求他/她登录,然后将他/她重定向到他/她尝试访问的页面?
最佳答案
您可以制作类似于下面的自己的中间件来处理该路由上的重定向:
this.ensureAuthenticatedOrSendToLogin = (req, res, next) => {
if (req.isAuthenticated()) {
return next();
}
return res.redirect('/login');
};
然后,您可以向 session 添加一个字段,以存储带有请求中的 url 的重定向:req.session.redirectTo = req.url
并在登录后加载它,然后在身份验证后成功重定向。
您可以使用的简化版本:
this.saveRedirect = (req, res, next) => {
req.session.redirectTo = req.url; // could pass this in from query too if redirect should be different!
return next();
};
this.checkRedirect = (req, res, next) => {
const { redirectTo } = req.session;
if (redirectTo) {
const redirect = redirectTo;
req.session.redirectTo = undefined; // reset session field so its not carried out again if you call this without saving again
return res.redirect(redirect);
}
return next();
};
关于javascript - 在不同情况下使用 Passport.js 更改和保存重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46592740/