[英]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.js
: authenticate = 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.