Узел экспресс конкретный IP роутер - PullRequest
0 голосов
/ 29 января 2019

У меня была эта проблема с выражением nodejs.Хотя это работает, я хотел сделать что-то, в чем я не уверен, если это возможно.

Я размещаю экспресс-приложение на своем локальном хосте.Мой локальный сервер также работает с hostapd.У меня есть точка доступа.

Теперь проблема.У меня есть этот код.

app.use('/', portal);
app.use('/admin', passport.login , admin);

Так что я могу посетить localhost:3000 и localhost:3000/admin просто отлично.Они оба показывают, что я хотел.Теперь вопрос заключается в том, существует ли способ обмена этими двумя при использовании IP-адреса точки доступа?

Например:

при посещении из точки доступа с использованием IP (например, http://10.0.0.1 и http://10.0.0.1/admin) Я хочу обслуживать приложение следующим образом:

app.use('/', portal);
app.use('/admin', passport.login , admin);

, но при посещении с использованием localhost я хочу поменять два или еще лучше удалить портал и перейти непосредственно к администратору:

app.use('/', passport.login , admin);

это возможно?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

вы можете получить ip из запроса или модуль ip и создать новое промежуточное ПО для обработки запроса

const ip = require('ip')

app.use('/',handleRedirection, admin);

function handleRedirection(req, res, next) {
  ip.address()==='127.0.0.1' || ip.isEqual('::1', '::0:1') ? next() : passport.login(req, res, next);
}
0 голосов
/ 29 января 2019

Вы можете просто перенаправить ваш запрос с портала администратору, если текущий ip 127.0.0.1:

function redirectIfLocalhost(req, res, next) {
    // https://expressjs.com/en/api.html#req.ip
    if (req.ip === "127.0.0.1") {
        res.redirect('/admin');
    } else {
        next();
    }
}

app.use('/',redirectIfLocalhost , portal)

Тем не менее, я не знаю, может ли это быть брешей в безопасности.

РЕДАКТИРОВАТЬ:

Если я хорошо понимаю, вы хотите что-то вроде этого:

// Handle passeport login inside handleAdmin middleware
// But replace the next function to control the next middleware
function handleAdmin(req, res, next) {
    passeport.login(req, res, (route) => {
        if (route) next(route)
        else admin(req, res, next);
    });
}

function handlePortal(req, res, next) {
    if (req.ip === "127.0.0.1") {
        handleAdmin(req, res, next);
    } else {
        portal(req, res, next);
    }
}

function preventIfLocalhost(req, res, next) {
    if (req.ip === '127.0.0.1') {
        res.status(404).send() // To be completed or replaced
    } else {
        next();
    }
}

app.use('/', handlePortal);

app.use('/admin', preventIfLocalhost, handleAdmin);

Я не пробовал свой код, поэтому могут потребоваться небольшие исправления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...