Как передать функцию промежуточного программного обеспечения для аутентификации из модуля основного сервера в файл маршрутизатора - PullRequest
0 голосов
/ 26 марта 2020

Что-то новое, пожалуйста, потерпите меня. Попытка использовать паспорт для аутентификации только для указания c маршрутов на веб-сайте. Маршруты находятся в отдельном файле с именем 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.

1 Ответ

0 голосов
/ 27 марта 2020

Я получил следующий ответ на Patreon от Kyle of Web Dev Simplified, и он работал как чудо!

"Вы должны иметь возможность просто создать другой файл, который называется 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 }

... и затем использовал Для получения доступа к функциям необходимо указать следующие операторы:

- в основном server.js -> const {checkAuthenticated, checkNotAuthenticated} = require('./authMiddleware.js')

- в файле маршрутизатора blog_a.js -> const {checkAuthenticated, checkNotAuthenticated} = require('../authMiddleware.js')

Спасибо!

...