javascript - Google 登录无法在隐身模式下工作

标签 javascript angular google-signin

我使用谷歌登录我的 Angular 9 项目。我正在使用谷歌登录 js API。
它给出了错误 当前环境未启用 Cookie 在谷歌浏览器隐身模式下,虽然它在正常的谷歌浏览器标签中工作正常。以下是错误详情。

details: "Cookies are not enabled in current environment."
error: "idpiframe_initialization_failed"
了解默认情况下在隐身模式下禁用第三方 cookie,但解决方案是什么?我发现其他使用谷歌登录的网站在谷歌浏览器隐身模式下完美运行。

最佳答案

Angular 只是浏览器中的 javascript。因此,正在从您的服务器为加载 Angular 应用程序的用户提供一堆 javascript。如果该服务器使用 google-api 处理身份验证,则您的用户仅与您的服务器交互(尽管通过重定向登录 google)。
此身份验证流程不需要 3rd 方 cookie。
然而! 如果您的身份验证直接在用户的浏览器中进行处理,那么如果禁用 3rd 方 cookie(因为它们处于隐身模式),您的应用程序将无法运行。
例如,我有一个通过 Github 页面提供的 Angular 应用程序。 Github 为该应用程序提供服务,但随后不做任何其他事情。因为我需要在用户的 GDrive 中创建一个文档,所以我从一个 javascript 客户端中验证并访问他们的资源。为了安全地工作,我的应用程序的用户必须允许 3rd 方 cookie。真的没有办法解决这个问题。
如果我的应用程序有后端,那么用户可以授予我的服务器访问他们的谷歌驱动器的权限,并且不需要 3rd 方 cookie。那时,访问用户 GDrive 的不是前端 javascript 客户端( Angular 应用程序),而是我的服务器。
使用后端允许不同且通常更安全的身份验证流程。然而,对于用户来说,用户体验是相同的。这就是为什么在某些情况下用户必须允许第三方 cookie,而在其他情况下则不允许。
一般来说,您可以更好地保护服务器,而不是相信用户的系统/浏览器是安全的。如果安全是一个问题,你真的应该从服务器而不是从浏览器中进行 API 调用。这样做也应该可以解决您的问题。

关于javascript - Google 登录无法在隐身模式下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63631849/

相关文章:

javascript - Skrollr 抖动和绝对定位上的跳跃

javascript - 新的剪贴板 API 访问非 `text/plain` 内容

javascript - 基于排序数组更新组件。 Angular (4.3)

javascript - 如果我路由到另一个组件然后返回,Angular-cli 3rd 方 javascript 将停止工作

java - 如何从 GoogleSignInAccount 获取性别(以前的方法现已弃用)

ios - 服务器请求 Google Calendar API 使用来自客户端的访问 token

android - 如何退出谷歌认证?

javascript - 使用套接字 IO 和 Node JS 通过套接字流式传输麦克风

javascript - 单击处理表单的提交按钮后弹出图像

angular - 包括 ionic 2/angular 2 的公共(public)标题栏