首页 > 解决方案 > 如何在 Electron/Firebase 应用中支持 HTTP 协议

问题描述

我正在尝试在我的 Electron 应用程序中使用 firebase 身份验证(saml)。我读过 Electron 不是“官方支持的”,但是我也遇到了一些线程表明人们已经让它工作了。我的问题是使用firebase.auth().signInWithRedirect(或signInWithPopup)时出现错误:

 code: "auth/operation-not-supported-in-this-environment"
 message: "This operation is not supported in the environment this application
 is running on. "location.protocol" must be http, https or chrome-extension and 
 web storage must be enabled."

谷歌出现了这篇提示和技巧文章,它建议只使用托管 URL:

第三,OAuth 请求需要有一个可验证的来源,可以在 Firebase 控制台中列入白名单。这要求当前的 Electron 浏览器窗口使用 http 或 https 协议,而不是文件。这意味着当前窗口内容应该使用 browserWindow.loadURL 而不是 browserWindow.loadFile 加载,并且 url 必须是 http 或 https url,而不是 file:// url。这通常需要在某个地方有一个托管页面,该页面被包装到 Electron 窗口中。

这可能会起作用,因为只需使用以下方法在 Angular 开发服务器上本地运行应用程序即可:

mainWindow.loadURL('http://localhost:4200');

我不想这样做,因为拥有托管页面会大大降低拥有原生应用程序的吸引力。

我可以通过让一个本地 Node/Express 实例在本地使用get-port为应用程序提供服务来找到一个空闲端口来在那里运行应用程序来完成这项工作。我还没有真正看到任何例子表明这一点。有一些关于让它工作的 Stackoverflow 问题,但没有什么让我认为它是一个可接受的生产级解决方案。

本地 Express 服务器是规避此错误的可接受方式,还是目前有更好的解决方案?

注意:此答案中推荐的软件包不是由 Firebase 发布的,而且它看起来也不支持 SAML 身份验证。

标签: javascriptnode.jsfirebasefirebase-authenticationelectron

解决方案


我已经在我的应用程序中成功实现了 firebase 电子邮件版本,加载 .html 文件而不是从 url 加载页面更可行,因为用户可以通过发送虚假数据来利用 url。但是使用 oauth 是不可能的,firebase 创建 webapp 您可以创建一个 html 文件,它应该包含 api 密钥、主机 url 等并将其托管在本地 android 文件中://android_assets/filename.html 即使离线也可以正常工作我不知道正确关于电子


推荐阅读