在电子渲染器和主进程之间共享Cookie和会话

时间:2018-08-31 19:01:51

标签: session authentication cookies electron desktop

在创建为用户执行基本身份验证的Electron Desktop应用程序时,我们加载一个BrowswerWindow,并加载一个登录表单。提交后,此表单实质上执行POST到URL的身份验证并授权用户使用更多特权信息。如果身份验证成功,则将设置用户的会话,以便BrowserWindow中的将来请求使用用户的身份验证的会话。

但是,我还没有看到可以将渲染器进程(BrowserWindow)中的会话存储到主进程的情况,因此,如果主进程需要发出请求,则可以使用同一经过身份验证的会话。如何允许主流程共享Renderer流程用于其需要发出的任何请求的会话和cookie?

TL; DR:用户已成功登录Electron的BrowserWindow。用户通过身份验证后,如何与浏览器窗口中的会话相同,如何在主流程中发出请求?

2 个答案:

答案 0 :(得分:0)

您是否尝试过:sessions 您可以使用IPC模块在browserWindow和main.js之间共享数据:IPC Tutorial

答案 1 :(得分:0)

电子渲染器进程使用Chromium请求管道。 Electron主进程使用node.js请求管道。

除了您因Cookie /会话引起的问题之外,来自主进程的node.js HTTPS请求将不适用于在Windows证书存储区中安装了自定义根证书的公司网络。

解决此问题的最简单方法是通过渲染器进程运行所有请求。 electron-remote有一些代码可以简化此操作:

import { requireTaskPool } from 'electron-remote';

const remoteAjax = requireTaskPool(require.resolve('electron-remote/remote-ajax'));

// Result is the object that XmlHttpRequest gives you
let result = await remoteAjax.get('https://httpbin.org/get');
console.log(result.url)

>>> 'https://httpbin.org/get'