如何在 Electron 桌面应用程序中使用 Google 登录?
How can I use Google sign-in inside of an Electron desktop application?
我正在使用 Node.js 和 Express 制作一个简单的应用程序。它在很大程度上依赖于 Google 个人资料图片和昵称的登录,并且在新的 Electron 应用程序中测试它时我抛出了错误 -
" This browser or app may not be secure
Try using a different browser. If you’re already using a supported browser, you can refresh your screen and try again to sign in. "
- 尝试使用 Google 登录时。我曾短暂地考虑过在用户的浏览器中打开登录,然后才意识到这不会将详细信息传回应用程序。我在网上找到的很多解决方案都依赖于 Firebase,我没有使用它。
有没有办法可以将数据从浏览器发送回应用程序?或者我还没有考虑过的其他解决方案?
您不需要 firebase 来执行此操作。您可以通过将用户带到他们的常规浏览器并再次返回来做到这一点。可以将详细信息传回应用程序。我们在 Amna.
中执行此操作
它有点复杂(但对任何其他提供商也很有用)。我假设您之前使用过某种 OAuth 提供程序。
在您的 Electron
应用程序中注册自定义 url 处理程序(例如 myapp://
。您可以使用 protocol
执行此操作)。我们使用了 electron-deeplink 库
在您应用的网站上,设置一个可以启动您的应用的侧页。例如,我们有一个启动我们应用程序的 authorize 页面。您想要将此网站注册为来自 Google 的 redirect url
,因此当 Google 命中此 url 时,它会将验证令牌传递给它。您可以在这里进行任何 OAuth 工作。
最后,从您的网站调用应用程序的 url 处理程序。 myapp://authroize?code=XYZ
。这会将所有数据发送回您的主应用程序。
deeplink.on('received', (link) => {
// parse out the code from the stuff here
});
- 如果您需要 UI 中的最终数据,您可以使用
ipcRenderer.send()
将数据传递给 UI
这可能与您的任务没有直接关系,但对于您的项目间接受此问题影响的人来说(例如,如果您正在使用 Electron 构建 Web 浏览器界面,您希望允许用户访问 Gmail等等),最好的办法是将 Electron 的用户代理更改为 Firefox 的。
view.webContents.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0";
这将导致 Google 帐户认为您是 运行 在 Firefox 而不是 Electron 上,因此它会阻止进一步的禁止检查发生。将用户代理设置为 Chromium 不适用于这种情况,因为 Google 帐户仍然可以检测到浏览器是基于 Electron 的。将用户代理设置为 Firefox 会以某种方式禁用此检查。
根据基于 Wexond Electron 的 Web 浏览器的开发人员的说法,这似乎可行。
有关相关项目的相关问题修复,请参阅 https://github.com/wexond/browser-base/issues/424(我不隶属于它)。
我正在使用 Node.js 和 Express 制作一个简单的应用程序。它在很大程度上依赖于 Google 个人资料图片和昵称的登录,并且在新的 Electron 应用程序中测试它时我抛出了错误 -
" This browser or app may not be secure
Try using a different browser. If you’re already using a supported browser, you can refresh your screen and try again to sign in. "
- 尝试使用 Google 登录时。我曾短暂地考虑过在用户的浏览器中打开登录,然后才意识到这不会将详细信息传回应用程序。我在网上找到的很多解决方案都依赖于 Firebase,我没有使用它。
有没有办法可以将数据从浏览器发送回应用程序?或者我还没有考虑过的其他解决方案?
您不需要 firebase 来执行此操作。您可以通过将用户带到他们的常规浏览器并再次返回来做到这一点。可以将详细信息传回应用程序。我们在 Amna.
中执行此操作它有点复杂(但对任何其他提供商也很有用)。我假设您之前使用过某种 OAuth 提供程序。
在您的
Electron
应用程序中注册自定义 url 处理程序(例如myapp://
。您可以使用protocol
执行此操作)。我们使用了 electron-deeplink 库在您应用的网站上,设置一个可以启动您的应用的侧页。例如,我们有一个启动我们应用程序的 authorize 页面。您想要将此网站注册为来自 Google 的
redirect url
,因此当 Google 命中此 url 时,它会将验证令牌传递给它。您可以在这里进行任何 OAuth 工作。最后,从您的网站调用应用程序的 url 处理程序。
myapp://authroize?code=XYZ
。这会将所有数据发送回您的主应用程序。
deeplink.on('received', (link) => {
// parse out the code from the stuff here
});
- 如果您需要 UI 中的最终数据,您可以使用
ipcRenderer.send()
将数据传递给 UI
这可能与您的任务没有直接关系,但对于您的项目间接受此问题影响的人来说(例如,如果您正在使用 Electron 构建 Web 浏览器界面,您希望允许用户访问 Gmail等等),最好的办法是将 Electron 的用户代理更改为 Firefox 的。
view.webContents.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0";
这将导致 Google 帐户认为您是 运行 在 Firefox 而不是 Electron 上,因此它会阻止进一步的禁止检查发生。将用户代理设置为 Chromium 不适用于这种情况,因为 Google 帐户仍然可以检测到浏览器是基于 Electron 的。将用户代理设置为 Firefox 会以某种方式禁用此检查。
根据基于 Wexond Electron 的 Web 浏览器的开发人员的说法,这似乎可行。
有关相关项目的相关问题修复,请参阅 https://github.com/wexond/browser-base/issues/424(我不隶属于它)。