0

有点新,请多多包涵。尝试使用护照仅对网站中的特定路线进行身份验证。这些路线位于一个名为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模块中,因此我可以将它们用作中间件来保护该模块中的路由。

我尝试module.exports = {checkAuthenticated, checkNotAuthenticated}在主“server.js”文件的底部使用,然后使用let server = require('../server.js')一行将这些函数导入到包含我要保护的路由的模块中。

但是,上面的server变量返回为未定义,我尝试了几种排列/解构方法来尝试导入它。一切都无济于事,由于“未定义”对象,我不断收到路由失败 - Error: Route.get() requires a callback function but got a [object Undefined]

如何在server.js文件中设置身份验证,然后传递其身份验证功能以用作单个路由文件中的中间件?

我查看了这个解决方案,但它没有清楚地解释如何从一个模块server.js--到另一个模块--获取中间件功能blog_a.js

4

1 回答 1

0

我从 Web Dev Simplified 的 Kyle 那里得到了以下关于 Patreon 的回复,它就像一个魅力!

“您应该能够创建另一个名为 authMiddleware.js 或类似文件的文件。然后在该文件中定义并导出最后的函数(module.exports = { function1, function2 })。现在在你需要那些你应该能够像这样导入它们的函数 (const { function1, function2 } = require('./authMiddleware'))。"

所以我按照凯尔的建议创建了以下单独的文件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 语句来访问这些函数:

-在主要server.js-->const {checkAuthenticated, checkNotAuthenticated} = require('./authMiddleware.js')

-在路由器文件中blog_a.js-->const {checkAuthenticated, checkNotAuthenticated} = require('../authMiddleware.js')

谢谢!

于 2020-03-26T22:38:32.847 回答