【问题标题】:Why isn't my passport middleware function working correctly?为什么我的护照中间件功能不能正常工作?
【发布时间】:2021-03-24 01:38:53
【问题描述】:

我是 Web 开发的新手,正在为 Node.js 应用程序使用 Passport.js 设置用户身份验证。除了我试图在登录表单上加载的图像之外,有关用户身份验证的所有内容都运行良好。我知道图像加载失败与我的中间件功能有关,因为当我通过注释掉该行来删除中间件功能时: app.use(checkAuthenticated);,图片加载正确,一切正常。这是我的中间件功能:

    function checkAuthenticated(req, res, next) {
      if (req.isAuthenticated() || req.path.includes('login')) {
        return next()
      }
        res.redirect('/login')
        return;
    }

我还假设使用 Passport.js 检查身份验证的这种类型的中间件函数会很常见,因此我将不胜感激任何关于如何为此类中间件函数做的最佳事情的反馈。我觉得我的实现有点不合适,“or path.includes('login')”有点不雅,但这是我能想到的唯一让函数工作的东西,而不会陷入无限循环(因为在第一次访问时,用户不会通过身份验证,并且每次重定向都会继续被重定向)。感谢您提供的任何帮助,如果有什么可以澄清的,请告诉我。

编辑: 如果有任何帮助,我还想补充一下,如何提供登录文件,以及如何将图像加载到登录文件中。对于提供登录文件的命令,我有:

app.get('/login', function(req, res) {
  res.sendFile(path.join(__dirname, 'public', 'login-page.html'));
});

对于登录文件的图像链接,我只有经典的: <img src="path to the image">

【问题讨论】:

    标签: node.js express passport.js middleware


    【解决方案1】:

    我发现我犯了什么错误,只是将问题和答案留在这里,以防万一有人遇到类似问题。 因此,每次提供任何内容时都会调用中间件函数,包括绑定到 html 文件的图像/css。当我的 login.html 文件被提供时,它必须让 css 和图像在被提供之前通过中间件功能。有点卡顿的解决方案我的意思是任何包含单词 login 的请求都会通过,我的 css 文件被命名为 login.css,所以它通过了,但是我的图像被命名为不包含单词 login 的东西,所以它被未经身份验证的用户阻止(登录页面上的所有用户都不会经过身份验证)。不过,我仍然愿意听取 Web 开发人员关于更优雅解决方案的任何意见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多