Tampilan Electron dapat memiliki akun proxy HTTP terpisah
Buat sesi khusus akun untuk setiap WebContentsView dan jawab hanya tantangan Basic proxy yang cocok untuk tampilan tersebut.
Pada aplikasi Electron saat ini, beri setiap WebContentsView yang terkait akun sesi bernama miliknya sendiri. Setelah aplikasi siap, pembantu async di proses utama dapat mengonfigurasi satu tampilan:
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 berbeda untuk setiap akun yang terisolasi dan simpan variabel pendengar di closure tampilan itu. Nama tanpa persist: membuat sesi di memori. Menggunakan kembali partisi yang sama sengaja menggunakan kembali status sesinya.
Lampirkan tampilan ke jendela yang ada dan navigasikan hanya setelah proxy dan handler-nya siap. Kode menargetkan kontrak peristiwa login saat ini, termasuk firstAuthAttempt, dan membatalkan percobaan berulang yang ditolak alih-alih mengirim ulang akun yang sama tanpa batas.
Handler memeriksa bahwa tantangan berasal dari proxy Basic HTTP yang dimaksud. Login situs web tidak memenuhi syarat untuk kredensial tersebut.
Aturan proxy memilih titik akhir; login menyediakan akun. File PAC dan aturan proxy manual tidak membawa kata sandi callback ini sendiri.
Ini autentikasi proxy HTTP. Ini tidak menambahkan autentikasi SOCKS5 ke Chromium. Koneksi sesi yang ada juga memerlukan penanganan siklus hidup normalnya saat rute diubah nanti.