NodeJS&Express身份validation中间件无法正常运行

我试图运行函数isUserAuthenticated每个请求到服务器通过要求它在app.js和'使用'它是这样的: app.use(authenticate.isUserAuthenticated)

我有一个/authenticatecallback路由,由我们的SAML身份提供商POSTED,其中包含validation用户和会话所需的信息。 这是我的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"); } 

正如所引用的,这个authentication函数在app.js需要和使用: authenticate = require('./routes/authenticate')app.use(authenticate.isUserAuthenticated)

问题:无论if语句的哪个变体validation请求中是否存在主题cookie,身份validation检查都不会被触发,redirect到IDP身份validation路由也不会被redirect。 上面的代码中的console.log检查正在返回:

undefined{}

当我使用isUserAuthenticated函数像这样: router.use('/', isUserAuthenticated, function(req, res, next) {... ,但我试图全局使用这个函数所以我不必在每条path上手动合并这个中间件。

任何意见/build议将不胜感激。 谢谢。

正如评论所build议的,

您可以将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"); }) 

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

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

 router.use(isUserAuthenticated) 

不要忘记把这个放在你的路线文件的顶部。

在这里查看应用程序级别和路由器级中间件的区别