Условно загружаем роутер промежуточного ПО Express JS - PullRequest
0 голосов
/ 26 мая 2018

У меня есть код Express JS, где я загружаю промежуточное ПО, которое определяет определенные конечные точки на маршрутизаторе.Конечные точки зависят от имени пользователя и выхода из системы.Я добавляю новую аутентификацию, и в этом случае я получаю свой токен авторизации от другого сервиса.Когда я получаю токен из другой службы, я не хочу, чтобы эти конечные точки загружались.

Это мой файл server.js

let app = express();
const authEndpoints = require('auth');  // this defines router endpoints
const alreadyAuth = require('checkHeaders'); // this middleware checks if request 
// already has the auth headers and set res.locals.alreadyAuthenticated to true else false

app.use('/', alreadyAuth);
app.use('/',function(req, res, next) {
  if(res.locals.alreadyAuthenticated === false)
    next();
else {
   console.log('authentication already exists skipping authEndpoints loading');
   next('route');
   }
}, authEndpoints); // login, logout

//continue here
app.use('/',nextMiddleware);

auth.js file

'use strict';

const express = require('express');
const path = require('path');
const router = express.Router();
router.get('/login', (req, res) => {
  // some code
  res.sendFile('login.html');
}
router.get('/logout', (req, res) => {
  // some code
});

module.exports = router;

Я вижу журнал консоли, который печатает «аутентификация уже существует, пропуская загрузку authEndpoints», но конечные точки / login и / logout по-прежнему доступны.

Также, когда я комментирую весь раздел

app.use('/',function(req, res, next) {
  if(res.locals.alreadyAuthenticated === false)
    next();
else {
   console.log('authentication already exists skipping authEndpoints loading');
   next('route');
   }
}, authEndpoints); // login, logout

, тогда конечные точки не загружаются.

Может кто-нибудь уточнить, если не следует использовать следующий путь («маршрут»).

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Я думаю, что будет лучше, если вы будете использовать промежуточное программное обеспечение "readyAuth "для каждого запроса, независимо от маршрута:

app.use(alreadyAuth);

Таким образом вы проверяете заголовки в каждом запросе для каждого маршрута.В промежуточном программном обеспечении "checkHeaders" вы должны использовать оператор if, который перенаправляет пользователя на страницу входа в систему, если он не прошел проверку подлинности, и использовать next () в случае, который уже прошел проверку подлинности.

let checkHeaders = function(req, res, next) {
    //some code that check headers
    if(isAuthenticate === false) {
        res.redirect("/login");
    } else {
        next();
    };
}

Теперь,все конечные точки после этого промежуточного программного обеспечения недоступны, если пользователь не аутентифицирован.Таким образом, вы можете использовать конечную точку выхода из системы или что-то еще.

Удачи!

0 голосов
/ 26 мая 2018

Вверху моей головы попробуйте добавить проверку isAuthenticated (независимо от вашего эквивалента) в код маршрутов / login и / logout, который вы перечислили.если он аутентифицирован, сделайте перенаправление на защищенную страницу, иначе верните пользователю форму входа (или вещь выхода из системы ...).:)

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