javascript - 在不同情况下使用 Passport.js 更改和保存重定向

标签 javascript node.js authentication passport.js

我正在编写一个网站,使用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/

相关文章:

javascript - 与新 React 应用程序运行相关的问题

angular - 如果我们使用带有 Angular 的第三方目录服务器(如 Azure),我们可以跳过 keycloak 登录页面吗?

javascript - 双面透明着色器看起来有问题

php - 从目录中一张一张获取图片

javascript - 在D3中只选择一个json对象

Javascript隐藏/显示div

javascript - 使用 node.js 时,我不断从具有 POST 请求方法的表单获取 [object][Object] 作为我的请求

javascript - 将变量从主 gulpfile.js 传递到跨多个文件的任务

internet-explorer - IE 实际上并没有删除 cookie

reactjs - auth.loginWithRedirect() 之后的 Auth0 重定向循环 - @auth0/auth0-spa-js