У меня есть код страницы входа в сеть на основе Express NodeJS.
У меня есть много серверных приложений, работающих на другом порту. Цель состоит в том, чтобы, когда пользователь аутентифицируется на сервере nodeJS, он автоматически перенаправлялся в свое приложение.
Но, если я могу смонтировать отдельный http-прокси и запустить его правильно, я бы хотел включить проксирование в этот JS-код входа в систему, когда пользователь подключен.
Ниже приведена часть кода.
const httpProxy = require('http-proxy');
const proxy = httpProxy.createProxyServer();
(...)
// http://localhost:3000/auth
app.post('/auth', function(request, response) {
// Capture the input fields
let username = request.body.username;
let password = request.body.password;
// Ensure the input fields exists and are not empty
if (username && password) {
// Execute SQL query that'll select the account from the database based on the specified username and password
connection.query('SELECT * FROM accounts WHERE username = ? AND password = ?', [username, password], function(error, results, fields) {
// If there is an issue with the query, output the error
if (error) throw error;
// If the account exists
if (results.length > 0) {
// Authenticate the user
request.session.loggedin = true;
request.session.username = username;
// Redirect to home page
proxy.web(req, res, { target: 'http://127.0.0.1:1881' });
//response.redirect('/home');
} else {
response.send('Incorrect Username and/or Password!');
}
response.end();
});
} else {
response.send('Please enter Username and Password!');
response.end();
}
});
app.listen(3000);
На response.redirect('/home');
хочу заменить на проксирование, но ничего не добавляется.
Я не знаю, возможно ли это, потому что на одном экземпляре работают 2 сервера.
Спасибо за помощь.
Внимание
Я думаю, что лучше использовать этот пакет, если вы используете экспресс: https://www.npmjs.com/package/express-http-proxy
Вы можете использовать его следующим образом:
const { createProxyMiddleware, fixRequestBody, responseInterceptor } = require( 'http-proxy-middleware' );
const proxyMiddleware = createProxyMiddleware({
target: 'foo',
onProxyReq: fixRequestBody,
logLevel: 'debug',
changeOrigin: true,
secure: false,
xfwd: true,
ws: true,
hostRewrite: true,
cookieDomainRewrite: true,
headers: {
"Connection": "keep-alive",
"Content-Type": "text/xml;charset=UTF-8",
"Accept": "*/*"
},
});
app.use( '/youRoute/**', proxyMiddleware );
И затем, когда вы вошли в систему, вы перенаправляете на себя проксированный маршрут:
res.redirect('/youRoute/');
Точно не знаю в чем разница, но express-http-proxy
разработан специально для экспресса. И вы говорите, что пользуетесь экспрессом, так что...
Хорошо, спасибо, но теперь я не знаю, как мне сделать динамическое перенаправление прокси, то есть как создать новый прокси маршрут для каждого пользователя? Приложение всегда локальное, но с другим портом. Я использую базу данных SQL для получения пользовательского порта, но кажется, что прокси-сервер всегда имеет только одно активное соединение ... у вас есть идея?
Маршрутизация пользователей по номеру порта довольно сложна и, я думаю, связана с проблемами безопасности. Делая это, идентификатор пользователя предсказуем. Я думаю, что лучше использовать уникальный маршрут и передавать буквенно-цифровой идентификатор, идентифицирующий использование, которое непредсказуемо.
Привет, большое спасибо, я могу проксировать с вашим кодом. но он использует http-proxy-middleware, а не express-http-proxy? в чем отличия?