มุมมอง Electron สามารถมีบัญชีพร็อกซี HTTP แยกกันได้
สร้างเซสชันเฉพาะบัญชีสำหรับแต่ละ WebContentsView และตอบเฉพาะความท้าทาย Basic ของพร็อกซีที่ตรงกับมุมมองนั้น
ในแอปพลิเคชัน Electron ปัจจุบัน ให้เซสชันที่มีชื่อของตัวเองแก่ WebContentsView แต่ละรายการที่ผูกกับบัญชี หลังจากแอปพร้อมแล้ว ผู้ช่วยแบบ async ในโปรเซสหลักสามารถกำหนดค่ามุมมองหนึ่งรายการได้:
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();
});
ระบุ partitionName ที่แตกต่างสำหรับแต่ละบัญชีที่แยกออกจากกัน และเก็บตัวแปรตัวรับฟังไว้ใน closure ของมุมมองนั้น การใช้พาร์ทิชันเดิมซ้ำจะใช้สถานะเซสชันของพาร์ทิชันนั้นซ้ำโดยเจตนา
แนบมุมมองเข้ากับหน้าต่างที่มีอยู่และนำทางหลังจากพร็อกซีและตัวจัดการพร้อมแล้วเท่านั้น โค้ดกำหนดเป้าหมายสัญญาเหตุการณ์ login ปัจจุบัน รวมถึง firstAuthAttempt และยกเลิกความพยายามซ้ำที่ถูกปฏิเสธแทนการส่งบัญชีเดิมซ้ำอย่างไม่สิ้นสุด
ตัวจัดการตรวจสอบว่าความท้าทายมาจากพร็อกซี Basic HTTP ที่ตั้งใจไว้ การเข้าสู่ระบบของเว็บไซต์ไม่มีสิทธิ์ใช้ข้อมูลรับรองเหล่านั้น
กฎพร็อกซีเลือกปลายทาง login จัดหาบัญชี ไฟล์ PAC และกฎพร็อกซีแบบกำหนดเองไม่ได้ถือรหัสผ่านของ callback นี้ด้วยตัวเอง
นี่คือการพิสูจน์ตัวตนพร็อกซี HTTP ไม่ได้เพิ่มการพิสูจน์ตัวตน SOCKS5 ให้กับ Chromium การเชื่อมต่อเซสชันที่มีอยู่ก็ต้องมีการจัดการวงจรชีวิตตามปกติเมื่อเปลี่ยนเส้นทางในภายหลัง