有些新内容,请多多包涵。尝试使用passport对网站中的仅特定路径进行身份验证。路由位于名为blog_a.js
的单独文件中。我在主server.js
文件中创建了以下函数:
function checkAuthenticated(req, res, next) {
if (req.isAuthenticated()){
return next()
}
res.redirect('/login')
}
function checkNotAuthenticated(req, res, next) {
if (req.isAuthenticated()){
return res.redirect('/')
}
next()
}
但是,我试图将上述功能传递到blog_a.js
模块中,所以我可以将它们用作中间件来保护该模块内的路由。
我已尝试在主'server.js'文件底部使用module.exports = {checkAuthenticated, checkNotAuthenticated}
,然后使用let server = require('../server.js')
行将这些功能导入包含要保护的路由的模块。
但是,上面的server
变量以未定义的形式返回,并且我尝试了几种排列/解构方法来尝试将其导入。都无济于事,由于“未定义”对象-Error: Route.get() requires a callback function but got a [object Undefined]
,我一直使路由失败。
如何在server.js
文件中设置身份验证,然后在单个路由文件中传递其身份验证功能以用作中间件?
[我看过this solution,但是它没有清楚地说明如何将中间件功能从一个模块[server.js
]转移到另一个模块[blog_a.js
。
我从Web Dev Simplified的Kyle收到了有关Patreon的以下回复,它的工作非常有魅力!
“您应该能够创建另一个名为authMiddleware.js或类似名称的文件。然后在该文件中定义并导出函数(module.exports = {function1,function2})。现在在在您需要这些功能的地方,您应该能够像这样导入它们(const {function1,function2} = require('./ authMiddleware'))。“
所以我遵循了Kyle的建议,并创建了以下单独的文件authMiddleware.js
:
function checkAuthenticated(req, res, next) {
if (req.isAuthenticated()){
return next()
}
res.redirect('/login')
}
function checkNotAuthenticated(req, res, next) {
if (req.isAuthenticated()){
return res.redirect('/')
}
next()
}
module.exports = { checkAuthenticated, checkNotAuthenticated }
...,然后使用以下require语句访问这些功能:
-in主server.js
-> const {checkAuthenticated, checkNotAuthenticated} = require('./authMiddleware.js')
-路由器文件blog_a.js
-> const {checkAuthenticated, checkNotAuthenticated} = require('../authMiddleware.js')
谢谢!