Электронный обратный вызов может быть вызван только один раз - PullRequest
1 голос
/ 21 июня 2019

У меня есть простое электронное приложение, которое оборачивается вокруг веб-приложения, запрашивающего имя пользователя и пароль.

Проблемы:

1) Когда пользователь вводит неверные учетные данные и снова появляется окно authWindow.С правильными учетными данными второй раз вход в систему не происходит.

2) Когда пользователь вводит неправильные учетные данные дважды, окно authWindow больше не появляется.

Любая помощь приветствуется.

Вот мой код:

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

app.on("login", (event, webContents, request, authInfo, callback) => {
  event.preventDefault();

  createAuthWindow().then(credentials => {
    callback(credentials.username, credentials.password);
  });
});

function createAuthWindow() {
  authWindow = new BrowserWindow({
    show: false,
    width: 400, 
    height: 200, 
    webPreferences: {
      nodeIntegration: true
    },
    title: "Authentication",
  });

  authWindow.on('ready-to-show', function (){
    authWindow.show();
  });

  authWindow.loadFile('password-form.html');

  return new Promise((resolve, reject) => {
    ipcMain.once('password-form-submission', (event, username, password) => {
      authWindow.close();
      const credentials = {
        username,
        password
      };
      resolve(credentials);
    });
  });
}

function createChatWindow() {
    chatWindow = new BrowserWindow({
        show: false,
        width: 1000, 
        height: 800, 
        webPreferences: {
            devTools: true
        },
        icon: __dirname + '/build/icon.png',
        title: "Messenger",
    });

    chatWindow.once('ready-to-show', function (){
      chatWindow.show();
    });

    chatWindow.loadURL('https://example.com');
    chatWindow.webContents.openDevTools();
}

app.on('ready', createChatWindow);

1 Ответ

1 голос
/ 21 июня 2019

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

Я должен был использовать этот Электрон ClientRequest API, чтобы повторить попытку еще раз.

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

const { app, BrowserWindow, ipcMain, net } = require('electron');

app.on("login", (event, webContents, request, authInfo, callback) => {
  event.preventDefault();

  let username = "";
  let password = "";

  const req = net.request({
    method: request.method,
    url: request.url
  });

  req.on("response", response => {
    console.log(response);
    if (response.statusCode > 400) {
      console.error("something went wrong");
      callback("", "");
    } else {
      console.log("we are good, request was successful"); // the request was authenticated correctly
      callback(username, password);
    }
    response.on("error", err => {
      console.error("something went wrong, response error", err);
      callback("", "");
    });
  });

  req.on("login", (loginAuthInfo, loginCallback) => {
    this.createAuthPrompt().then(credentials => {
      username = credentials.username;
      password = credentials.password;
      loginCallback(username, password);
    });
  });

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