Dalam aplikasi Electron semasa, berikan setiap WebContentsView yang berkaitan akaun sesi bernama tersendiri. Selepas aplikasi sedia, pembantu async dalam proses utama boleh mengkonfigurasi satu paparan:

const routeSession = session.fromPartition(partitionName);
await routeSession.setProxy({
  mode: 'fixed_servers',
  proxyRules: `http://${proxyHost}:${proxyPort}`,
});
const view = new WebContentsView({
  webPreferences: { session: routeSession },
});
view.webContents.on('login', (event, details, authInfo, callback) => {
  if (!authInfo.isProxy
      || authInfo.scheme.toLowerCase() !== 'basic'
      || authInfo.host !== proxyHost
      || authInfo.port !== proxyPort) return;
  event.preventDefault();
  if (details.firstAuthAttempt) callback(proxyUser, proxyPassword);
  else callback();
});

Berikan partitionName berbeza untuk setiap akaun terasing dan simpan pemboleh ubah pendengar dalam closure paparan itu. Nama tanpa persist: mencipta sesi dalam memori. Menggunakan semula partition yang sama sengaja menggunakan semula keadaan sesinya.

Lampirkan paparan pada tetingkap sedia ada dan navigasi hanya selepas proksi dan pengendalinya sedia. Kod menyasarkan kontrak peristiwa login semasa, termasuk firstAuthAttempt, dan membatalkan cubaan berulang yang ditolak dan bukannya menghantar semula akaun yang sama tanpa henti.

Pengendali menyemak bahawa cabaran itu datang daripada proksi Basic HTTP yang dimaksudkan. Log masuk tapak web tidak layak untuk kelayakan tersebut.

Peraturan proksi memilih titik akhir; login membekalkan akaun. Fail PAC dan peraturan proksi manual tidak membawa kata laluan callback ini sendiri.

Ini pengesahan proksi HTTP. Ia tidak menambah pengesahan SOCKS5 pada Chromium. Sambungan sesi sedia ada juga memerlukan pengendalian kitaran hayat biasa apabila laluan diubah kemudian.

Artikel berkaitan