簡體   English   中英

如何將用於身份驗證的中間件功能從主服務器模塊傳遞到路由器文件

[英]How to pass a middleware function for authentication from the main server module to a router file

有點新,請多多包涵。 嘗試使用通行證驗證網站中的特定路線 這些路由位於一個名為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文件中設置身份驗證,然后傳遞其身份驗證函數以用作單個路由文件中的中間件?

我看着這個解決方案,但它並沒有解釋清楚如何從一個module--獲得中間件功能server.js --to另一個module-- 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 main server.js --> const {checkAuthenticated, checkNotAuthenticated} = require('./authMiddleware.js')

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

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM