登录页面重定向
我有一个基本的HTML登录页面,其中用javascript处理用户名和密码字段,并将输入发送回我的Node API以进行完全AD身份验证。在前端,我正在使用本地存储来捕获用户名值。现在,我还有4个HTML模块,只有在身份验证成功的情况下才可以访问。在Node应用程序中运行的身份验证部分运行正常。但是,我不为登录用户处理会话。而且,如果登录失败或用户注销时,我想使所有4个HTML模块都无法访问(只需使用"localStorage.clear()"
)。如何通过仅使用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');
app.use( bodyParser.json() );
app.use(bodyParser.urlencoded({
extended: true
}));
var port = process.env.PORT || 8080;
app.use(cors());
app.use('/api', router);
router.post('/Login1', function(req, res)
{
var username = req.body.username;
var password = req.body.password;
console.log(username);
var config = {
url: 'abcdefgh',
baseDN: 'dc=abcdef,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!');
res.redirect('http://127.0.0.1:5500/test.html');
}
else {
console.log('Authentication failed!');
res.send("Login Failed. Incorrect username or password");
}
});
});
app.listen(port);
console.log('Listening at port ' + port);
回答如下:我想我知道问题出在哪里。核心模块只是为您处理每个请求,因此,如果找到了匹配的html文件,则每个http请求都会首先在核心中间件中查找。您需要放置
app.use(cors());
定义了路由并定义了通往test.html的自定义路由(相关部分在下面标记):
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var router = express.Router();
var cors = require('cors');
var ActiveDirectory = require('activedirectory');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
var port = process.env.PORT || 8080;
//use routes on the localhost:8080 path
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: 'abcdefgh',
baseDN: 'dc=abcdef,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!');
res.redirect('/test.html');
} else {
console.log('Authentication failed!');
res.send("Login Failed. Incorrect username or password");
}
});
});
/*------------------------------------------------------------------------------*/
//Relevant part:
router.get('/test.html', function(req, res) {
if (loggedin) //check if user is loggedin, replace with your variables/checks
res.sendFile('path/to/your/test.html');
else
res.redirect('/Login1'); //redirect somewhere
})
//This needs to be after the routes
app.use(cors());
/*---------------------------------------------------------------------------------*/
app.listen(port);
console.log('Listening at port ' + port);
登录页面重定向
我有一个基本的HTML登录页面,其中用javascript处理用户名和密码字段,并将输入发送回我的Node API以进行完全AD身份验证。在前端,我正在使用本地存储来捕获用户名值。现在,我还有4个HTML模块,只有在身份验证成功的情况下才可以访问。在Node应用程序中运行的身份验证部分运行正常。但是,我不为登录用户处理会话。而且,如果登录失败或用户注销时,我想使所有4个HTML模块都无法访问(只需使用"localStorage.clear()"
)。如何通过仅使用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');
app.use( bodyParser.json() );
app.use(bodyParser.urlencoded({
extended: true
}));
var port = process.env.PORT || 8080;
app.use(cors());
app.use('/api', router);
router.post('/Login1', function(req, res)
{
var username = req.body.username;
var password = req.body.password;
console.log(username);
var config = {
url: 'abcdefgh',
baseDN: 'dc=abcdef,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!');
res.redirect('http://127.0.0.1:5500/test.html');
}
else {
console.log('Authentication failed!');
res.send("Login Failed. Incorrect username or password");
}
});
});
app.listen(port);
console.log('Listening at port ' + port);
回答如下:我想我知道问题出在哪里。核心模块只是为您处理每个请求,因此,如果找到了匹配的html文件,则每个http请求都会首先在核心中间件中查找。您需要放置
app.use(cors());
定义了路由并定义了通往test.html的自定义路由(相关部分在下面标记):
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var router = express.Router();
var cors = require('cors');
var ActiveDirectory = require('activedirectory');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
var port = process.env.PORT || 8080;
//use routes on the localhost:8080 path
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: 'abcdefgh',
baseDN: 'dc=abcdef,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!');
res.redirect('/test.html');
} else {
console.log('Authentication failed!');
res.send("Login Failed. Incorrect username or password");
}
});
});
/*------------------------------------------------------------------------------*/
//Relevant part:
router.get('/test.html', function(req, res) {
if (loggedin) //check if user is loggedin, replace with your variables/checks
res.sendFile('path/to/your/test.html');
else
res.redirect('/Login1'); //redirect somewhere
})
//This needs to be after the routes
app.use(cors());
/*---------------------------------------------------------------------------------*/
app.listen(port);
console.log('Listening at port ' + port);