[英]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.