Перенаправление страницы входа - сделайте HTML недоступным, если вы не авторизуетесь - PullRequest
1 голос
/ 05 мая 2020

У меня есть базовая c страница входа в HTML, где поля имени пользователя и пароля обрабатываются в javascript, а входные данные отправляются обратно в мой Node API для полной аутентификации AD.

У меня есть еще 4 HTML сайтов, которые должны быть доступны только в том случае, если пользователь прошел аутентификацию. Часть аутентификации, запущенная в приложении Node, работает отлично, однако я не могу обрабатывать сеанс для пользователей, которые вошли в систему. Я также хочу сделать все сайты 4 HTML недоступными, если вход в систему не удается или когда пользователь выходит из системы.

Как мне обработать доступность, просто используя HTML и Vanilla JS?

login. js

var express     = require('express');      
var app         = express();                
var bodyParser  = require('body-parser');
var router      = express.Router();  
var cors        = require('cors');
var ActiveDirectory = require('activedirectory');
const session = require('express-session');


app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
  extended: true
})); 

app.use(session({
    name: 'session.sid',
    secret: 'entersomepasswordhere',
    resave: false,
    saveUninitialized: false
}));

var port = process.env.PORT || 8080; 

app.use('/', router);

router.post('/api/Login1', function(req, res) 
{
    var username = req.body.username;
    var password = req.body.password;

    console.log(username);


    var config = {
        url: 'abc',
        baseDN: 'dc=abc,dc=abc'
    };
    var ad = new ActiveDirectory(config);
    // Authenticate
    ad.authenticate(username, password, function(err, auth) {
        if (err) {
            res.send("Login Failed. Incorrect username or password");
            console.log('ERROR: '+JSON.stringify(err));
            return;
        }
        if (auth) {
            console.log('Authenticated!');
            req.session.loggedin = true;
            res.redirect('/test.html');
        }
        else {
            console.log('Authentication failed!');
            res.send("Login Failed. Incorrect username or password");
        }
    });
});

router.get('/test.html', function(req, res) {
    if (req.session.loggedin == true) //check if user is loggedin, replace with your variables/checks
        res.sendFile('/absolutepath/test.html');
    else
        res.redirect('/Login1');
})

app.use(cors());

app.listen(port);
console.log('Listening at port ' + port);

1 Ответ

1 голос
/ 05 мая 2020

Думаю, я знаю, в чем проблема. Модуль ядра просто обрабатывает каждый запрос за вас, поэтому каждый HTTP-запрос сначала просматривает промежуточное ПО ядра, если он находит соответствующий файл html. Вам необходимо разместить

app.use(cors());

После того, как вы определили свои маршруты и определите собственный маршрут для вашего теста. html. См. Следующий пример:

var express = require('express');
var app = express();
var router = express.Router();
var cors = require('cors');

var port = process.env.PORT || 8080; 

//use routes on the localhost:8080 path
app.use('/', router);

//Relevant part:
router.get('/test.html', function(req, res) {
    var loggedin = true; //false if not loggedin
    if (loggedin)
        res.sendFile(__dirname + '/test.html');
    else
        res.redirect('https://www.google.com/');
})

//This needs to be after the routes
app.use(cors());

app.listen(port);
console.log('Listening at port ' + port);

Вы можете установить для входа значение false, чтобы увидеть, что произойдет, если пользователь не вошел в систему, и истину, если пользователь вошел в систему.

ОБНОВЛЕНИЕ

Чтобы сохранить, если пользователь вошел в систему, я рекомендую использовать модуль express -session: https://expressjs.com/en/resources/middleware/cookie-session.html

Вы можете включить его как следующее:

const session = require('express-session');
app.use(session({
    name: 'session.sid',
    secret: 'entersomepasswordhere',
    resave: false,
    saveUninitialized: false
}));

После аутентификации вы можете просто установить

req.session.loggedin = true;

, а затем просто проверить,

req.session.loggedin == true

Примечание: вы можете заменить loggedin любым именем переменной вам нравится, и вы также можете установить несколько файлов cookie сеанса.

В вашем случае просто установите req.session.loggedin = true перед перенаправлением на свой тест. html, а затем выполните проверку там.

...