Electron回调只能调用一次

Electron回调只能调用一次,electron,Electron,我有一个简单的电子应用程序,它围绕着一个提示输入用户名和密码的web应用程序 问题: 1) 当用户输入错误的凭据并且authWindow再次出现时。使用正确的凭据,第二次登录不会发生 2) 当用户两次输入错误的凭据时,authWindow将不再显示 感谢您的帮助 这是我的密码: const { app, BrowserWindow, ipcMain } = require('electron'); app.on("login", (event, webContents, request, au

我有一个简单的电子应用程序,它围绕着一个提示输入用户名和密码的web应用程序

问题:

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);

更新:在Electron 8中,此问题似乎已得到解决,因此您无需执行下面描述的解决方法

我也面临过这个问题,下面是我最后做的事情

我必须使用这个Electron api才能重试更多次

您的“登录”事件处理程序将如下所示

const{app,BrowserWindow,ipcMain,net}=require('electron');
app.on(“登录”),(事件、网络内容、请求、身份验证信息、回调)=>{
event.preventDefault();
让用户名=”;
让密码=”;
const req=net.request({
方法:request.method,
url:request.url
});
请求打开(“响应”,响应=>{
控制台日志(响应);
如果(response.statusCode>400){
console.error(“出错”);
回调(“,”);
}否则{
console.log(“我们很好,请求成功”);//请求已正确验证
回调(用户名、密码);
}
on(“错误”,err=>{
错误(“出错,响应错误”,err);
回调(“,”);
});
});
请求打开(“登录”,(loginAuthInfo,loginCallback)=>{
这个.createAuthPrompt().then(凭据=>{
用户名=凭据。用户名;
密码=凭证。密码;
loginCallback(用户名、密码);
});
});
请求结束();
});

对于我的应用程序(使用Electron 4)的网络请求,在凭据正确之前,我不会得到响应。相反,如果输入了无效凭据,则会触发另一个“登录”事件。这会一直重复,直到提供正确的凭证为止。@ShaneGannon,这就是想法。这允许用户重试多次,直到成功。我要补充的是,如果您多次输入无效凭据>(可能15次),您将得到一个“错误”响应。在使用Electron 8.3.1对我的代理进行身份验证时,我仍然会遇到此错误。有办法吗?