网站的基本 Google 登录代码在 Internet Explorer 11 中不起作用

Posted

技术标签:

【中文标题】网站的基本 Google 登录代码在 Internet Explorer 11 中不起作用【英文标题】:Basic Google Sign-In for Websites code not working in Internet Explorer 11 【发布时间】:2015-09-19 03:45:25 【问题描述】:

我正在尝试对网站使用 Google 登录 (https://developers.google.com/identity/sign-in/web/) 并注意到我的解决方案在 Internet Explorer 11 中无法运行。为了尽可能多地消除因素,我创建了一个基于以下内容的简单测试用例谷歌提供的示例代码。

我已经在我的 Windows 7 PC 上的 Chrome、我的 Mac 上的 Chrome、我的 Mac 上的 Safari、我的 Mac 上的 Firefox 和我的 iPhone 上的 Safari 上测试了它。它适用于所有这些(例如,当我单击登录按钮并选择/输入我的 Google 帐户时,它会返回页面并且按钮显示“已登录”)。

但是,它不适用于 PC 上的 Internet Explorer 11,或者奇怪的是,它不适用于 ios 版 Chrome。单击该按钮时,会打开一个窗口,让我选择我的 Google 帐户,但在做出选择后,该窗口会关闭并返回到页面,其中的按钮仍然显示“登录”。

这里是示例代码:

<html>
<head>
<meta name="google-signin-client_id" content="61023618497-vqfbod57f26ncjl9d6firk3t09ve4tt3.apps.googleusercontent.com">
<script src="https://apis.google.com/js/platform.js" async defer></script>
</head>
<body>
<div class="g-signin2"></div>
</body>
</html>

对可能发生的事情有任何想法吗?我四处寻找,没有找到任何解决方案。

一个想法是将“accounts.google.com”添加到 IE 的受信任站点。这没有用。我还尝试通过 https 而不是 http 访问该页面。那也没有什么不同。还有什么我应该尝试的吗?

【问题讨论】:

我们需要谷歌来解决这个问题。有人知道向他们提出问题的方法吗?我将这个问题和另一个(***.com/questions/31494204/…)的标签更新为他们推荐的两个标签(groups.google.com/forum/#!topic/google-federated-login-api/…) 此问题已在 Google 登录的最新更新(2015 年 11 月 19 日)中得到解决。您引用的页面现在应该可以在 IE11/Edge 中使用。 看来这个缺陷是在 2015 年 11 月 23 日左右修复的 github.com/googleplus/gplus-quickstart-javascript/issues/12 因为这是一个评论页面,所以很难在这篇文章中表示它。读一读。 我投票决定将此问题作为离题结束,因为它是 Google 端的一个错误,现已修复。 我在 IE 11 中使用 HTTP 协议时仍然存在这个问题(其他浏览器工作正常) 【参考方案1】:

几个月后我现在遇到了同样的问题。

如果你看:

https://developers.google.com/identity/sign-in/web/build-button

并尝试使用他们的演示按钮登录,它不适用于 IE11(但它适用于我在不同操作系统上使用的其他浏览器)。我找不到任何解决方案。

我将评论留给未来的读者,他们将来会搜索同样的问题。如果 Google 的演示按钮不起作用,她至少可以放心,问题可能不在她的代码中。 :)

【讨论】:

【参考方案2】:

确保您没有将 IE 11 配置为阻止所有第三方 cookie。

第三方 cookie 是必需的,而当第三方 cookie 被阻止时出现的用户体验(正如您所发现的)还有很多不足之处。不会向用户显示警告或错误消息。

您可以尝试在错误发生之前捕获它。可以通过尝试在第二个域(由您控制​​)上设置 cookie 然后发出第二个请求以确保设置 cookie 来检测第三方 cookie 是否被阻止。您需要在您的服务器上设置一个脚本或其他东西来设置和检查 cookie(由于浏览器安全模型,它不能仅使用 JavaScript 来完成)。

【讨论】:

这不是问题,至少是我看到的问题。我在 IE 控制台中收到“SCRIPT5: Access is Denied”错误,它指的是 Google iframe。更改 IE 以允许所有 cookie(低安全设置)无效。将服务站点、accounts.google.com 等添加到受信任的站点没有任何效果。【参考方案3】:

我已成功执行以下操作: 从 $document.ready 加载脚本以启动 Google 按钮呈现等。 (即,无论您在 apis.google.com/js/client:platform.js?onload= x 中有什么)

例如

<script src="https://apis.google.com/js/client:platform.js?onload=startApp" async defer></script>

将 startApp() 移至此处:

$(document).ready(function () 
    startApp();

startApp() 看起来像这样:

function startApp() 
    gapi.load('auth2', function () 
        gapi.client.load('plus', 'v1').then(function () 
            gapi.signin2.render('signin-button', 
                scope: 'https://www.googleapis.com/auth/plus.login',
                fetch_basic_profile: false
            );
            gapi.auth2.init(
                fetch_basic_profile: false,
                scope: 'https://www.googleapis.com/auth/plus.login'
            ).then(
                function () 
                    console.log('init');
                    auth2 = gapi.auth2.getAuthInstance();
                    auth2.isSignedIn.listen(updateSignIn);
                    auth2.then(updateSignIn());
                );
        );
    );

【讨论】:

【参考方案4】:

我努力让该示例在 localhost 上运行,但是一旦我将它部署到真实的 URL,它就可以运行了。

【讨论】:

以上是关于网站的基本 Google 登录代码在 Internet Explorer 11 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 selenium 在某些网站中使用 kakao、google、naver id 自动登录

Google登录网站Django:拒绝为目标域生成登录提示的权限

除非已登录Google帐户,否则不会显示嵌入式Google日历

用于网站的 Google 登录 - 如何获取令牌

仅向 Google 网站登录请求“openid”范围

服务器端应用程序的 Google+ 登录身份验证不起作用