Как мне убедиться, что приложение Electron express доступно только из электронного окна - PullRequest
0 голосов
/ 28 ноября 2018

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

const {app, BrowserWindow} = require('electron');
const express = require('express');
const ex_app = express();


// express
// ----------------------------------------
const ex_port = 5000;

ex_app.set('view engine', 'ejs');
ex_app.set('views', __dirname + '/app/views');

ex_app.get('/', (req, res) => {
  res.render('pages/index', {title: 'Root', message: 'root page loaded'});
});

ex_app.listen(ex_port, () => {
  console.log(`App listening on port ${ex_port}!`);
});
// ----------------------------------------

// electron
// ----------------------------------------
app.once('ready', () => {
  mainWindow = new BrowserWindow({
    width:           500,
    height:          400,
    titleBarStyle:   'hiddenInset',
    backgroundColor: "#fff",
    show:            false
  });

  mainWindow.loadURL('http://localhost:5000/');

  mainWindow.once('ready-to-show', () => {
    mainWindow.show();
    mainWindow.focus();
    mainWindow.maximize();
  });
});
// ----------------------------------------

Но я заметил, что экспресс-приложение также доступно в браузере, введя http://localhost:5000, поэтомуя хотел знать, можно ли автоматически отключить доступ любого пользователя к электронному окну?

У меня была идея передать токен uniq в электронное окно, аналогично этому:

let token = Math.random().toString(36).substr(2);
mainWindow.loadURL(`http://localhost:5000/?token=${token}`);

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

1 Ответ

0 голосов
/ 10 декабря 2018

Вы также можете установить свой токен на cookie / user agent.Например:

ex_app.use((req, res, next) => {
  if (req.get('User-Agent').endsWith(token)) {
    return next();
  }

  res.end()
});
...
mainWindow.webContents.setUserAgent(mainWindow.webContents.getUserAgent() + token);
...