În aplicațiile Electron actuale, oferiți fiecărui WebContentsView asociat unui cont propria sesiune numită. După ce aplicația este pregătită, un ajutor asincron din procesul principal poate configura o vizualizare:

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

Furnizați un partitionName distinct pentru fiecare cont izolat și păstrați variabilele ascultătorului în closure-ul acelei vizualizări. Un nume fără persist: creează o sesiune în memorie. Reutilizarea aceleiași partiții reutilizează în mod deliberat starea sesiunii sale.

Atașați vizualizarea la fereastra existentă și navigați numai după ce proxy-ul și handler-ul ei sunt gata. Codul urmărește contractul actual al evenimentului login, inclusiv firstAuthAttempt, și anulează o încercare repetată respinsă în loc să retrimită la nesfârșit același cont.

Handler-ul verifică dacă provocarea provine de la proxy-ul Basic HTTP dorit. Autentificarea unui site web nu este eligibilă pentru aceste credențiale.

Regulile proxy aleg punctul final; login furnizează contul. Fișierele PAC și regulile proxy manuale nu poartă ele însele parola acestui callback.

Aceasta este autentificare proxy HTTP. Nu adaugă autentificare SOCKS5 la Chromium. Conexiunile de sesiune existente au nevoie și ele de gestionarea obișnuită a ciclului de viață atunci când o rută este schimbată mai târziu.

Articole similare