Google+登录 - 未捕获的SecurityError

时间:2014-07-31 17:20:21

标签: javascript django authentication google-plus google-oauth

我正在实施Google+登录的混合/一次性身份验证代码流,并在登录提示并授予应用程序权限后在Chrome的JS控制台中遇到此错误,可能是当Google的代码尝试回拨按钮时:

Uncaught SecurityError: Blocked a frame with origin "https://ww2.fa.org" from accessing a frame with origin "https://accounts.google.com". Protocols, domains, and ports must match.

在Safari或IE中似乎没有出现这种情况,并且有时在Firefox中会出现类似的权限错误,但在Chrome中可以更频繁地重现。使用登录按钮刷新框架(在遵循谷歌方面的提示之后)通常会导致刷新按钮“知道”登录成功调用成功处理程序...它应该始终无需刷新即可正常工作,但却没有。

有什么想法?登录位于https://ww2.fa.org/gauth/,如果您倾向于查看,它只会请求电子邮件范围!

2 个答案:

答案 0 :(得分:16)

我摆脱此错误消息的方法是将https://accounts.google.com添加到API开发人员控制台下的OAuth客户端设置中的AUTHORIZED JAVASCRIPT ORIGINS下。 auth - >凭证。

<强>更新

当我切换到使用gapi.auth.signIn而不是gapi.login.render时,实际上没有修复它并且问题又重新出现了。 this post中的评论中描述的问题是g-oauth-windowauthResult属性发送到后端时的序列化。删除该参数或只发送您需要的属性为我修复它。

var signInCallback = function(authResult) {
  delete authResult['g-oauth-window'];
  ajaxCallToBackend(authResult);
};

希望这有帮助。

答案 1 :(得分:8)

如果你得到同样的错误并且亚当发布的上述方法对你不起作用(它对我自己没有用),请尝试以下方法。

我通过禁用已安装的任何Chrome扩展程序来解决问题,这些扩展程序读取并更改呈现的HTML以及重写页眉并向页面注入一种JavaScript的内容。

一个这样的扩展(导致我Blocked a frame with origin "https://apis.google.com" from accessing a frame with origin "https://example.com错误的扩展名)是Ripple Emulator(Beta)0.9.15 基于浏览器的html5移动应用程序开发和测试工具,可以在您访问的网站上读取和更改您的所有数据&#34;正如它在扩展权限细节中所述。

我禁用的另一个此类扩展是ModHeader 1.2.4修改请求标题,这也是&#34;读取并更改您访问的网站上的所有数据&#34;。

只需查看您的Chrome扩展程序,即可删除任何可疑的修改页面。