繁体   English   中英

NodeJS和Express身份验证中间件无法正常运行

[英]NodeJS & Express authentication middleware not functioning correctly

我试图通过在app.js要求它并以此方式“使用”它,以对服务器的每个请求运行isUserAuthenticated函数: app.use(authenticate.isUserAuthenticated)

我有一个/authenticate回调路由,该路由由我们的SAML身份提供程序发布到,其中包含验证用户和会话所需的信息。 这是我的authenticate.js文件中的内容:

module.exports = router;
module.exports.isUserAuthenticated = function(req, res, next) {
    console.log(req.cookies.subject);
  if (req.cookies.subject) {
      console.log(req.cookies.subject)
    return next();
    } res.redirect("LINK TO IDP FOR VERIFICATION, callback func. is then ran to get value of user and session");
}

如前所述,此身份验证功能是必需的,并在app.jsauthenticate = require('./routes/authenticate')app.use(authenticate.isUserAuthenticated)

问题:无论用于验证请求中是否存在主题cookie的if语句的任何变体,都不会触发身份验证检查,并且也不会重定向到IDP身份验证路由的重定向。 上面代码中的console.log检查返回:

undefined{}

当我像这样手动使用isUserAuthenticated函数时,身份验证仅在一条路由上进行: router.use('/', isUserAuthenticated, function(req, res, next) {... ,但是我正在尝试全局使用此函数因此,我不必在每条路线上都手动集成此中间件。

任何建议/建议将不胜感激。 谢谢。

如果您使用Express JS,则需要在路由器对象上设置中间件

router.use(isUserAuthenticated)

不要忘记将其放在您的路线文件的顶部。

此处查看应用程序级别和路由器级别中间件之间的区别

如评论中所建议,

您可以将isUserAuthenticated函数移至app.js。 看起来像这样

app.use(function(req, res, next) {
  if (req.cookies.subject) {
    next();
    } 
else 
    res.redirect("LINK TO IDP FOR VERIFICATION, callback func. is then ran to get value of user and session");

})

这将处理所有请求,然后再将它们转发到路由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM