Chrome 上的 Google Auth API Javascript idpiframe 初始化错误

Posted

技术标签:

【中文标题】Chrome 上的 Google Auth API Javascript idpiframe 初始化错误【英文标题】:Google Auth API Javascript idpiframe initialization error on Chrome 【发布时间】:2017-07-28 20:12:13 【问题描述】:

我使用 GSuite,并且正在编写一个非常简单的网络应用程序以使用 Google Auth API,但我得到一个异常“idpiframe_initialization_failed”。

现在我有了 google 示例中显示的确切 html: https://developers.google.com/api-client-library/javascript/samples/samples

1) 我在Google Developer Console上创建了一个项目

2) 我设置了 OAUTH 授权屏幕

3) 我已经创建了客户端 ID,创建了限制和重定向 URL

4) 我还创建了 API KEY

5) 最后我启用了 People API,因为在设置 discoveryDocs 参数时发现服务失败

通过所有这些步骤,当我调用 gapi.client.init 时,它会引发异常仅在 chrome 中,我不明白为什么。

初始化API的代码是:

    gapi.client.init(
        apiKey: 'MY_API_KEY',
        discoveryDocs: ["https://people.googleapis.com/$discovery/rest?version=v1"],
        clientId: 'MY_CLIENT_ID.apps.googleusercontent.com',
        scope: 'profile'
    ).then(function (response) 
      // Listen for sign-in state changes.
      gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

      // Handle the initial sign-in state.
      updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
    ,function(reason)
        console.log('onerror');
        console.log(reason);
      // Listen for sign-in state changes.
      gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

      // Handle the initial sign-in state.
      updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());

代码正在运行错误块,消息是:

details: "Failed to read the 'localStorage' property from 'Window': Access is denied for this document."
error:"idpiframe_initialization_failed"

任何想法为什么我会遇到这个错误?

谢谢!

【问题讨论】:

有答案吗? 找到的唯一解决方法是使用此处描述的 OAUTH 2.0 端点:developers.google.com/identity/protocols/OAuth2UserAgent 【参考方案1】:

我遇到了同样的问题。经过一段时间的投入,找到了原因。此错误是因为在 chrome 设置中,您启用了阻止第三方 cookie 和站点数据选项。

可以通过禁用此选项来解决: “要找到设置,请打开 Chrome 设置,在搜索框中输入“内容设置”,单击“内容设置”按钮,然后查看 Cookies 下的第四项。” 取消选中“阻止第三方 Cookie 和网站数据”复选框。

希望这可以帮助您解决问题。

【讨论】:

嗨,拉芙琳,你是对的。这就是问题所在。但我担心的是我在其他使用 Google 登录的网站上没有发现这个问题。是不是说大家都用URL重定向方式,没人用JS API? 嘿大卫,即使我正在调查这个原因。同时,搜索确切原因,我发现了这一点。这对你也有帮助。请看一看。 github.com/google/google-api-javascript-client/issues/260 和 developers.google.com/identity/sign-in/web/… 嘿,我还通过检查第三方 cookie 和数据选项测试了其他应用程序。我发现这些应用程序强制允许设置 cookie。如果我们如上图所示禁用 cookie,则谷歌登录在那里不起作用。请试试这个。 对我来说,我不得不禁用广告拦截 这对我有用,尽管我已经为该网站明确“允许”。显然“允许”不会覆盖默认块?【参考方案2】:

问题在于 Google 的 API 控制台以及它如何处理创建凭据。 只有当我通过以下网址访问它时,它似乎才有效 https://developers.google.com/identity/sign-in/web/sign-in#before_you_begin 有一个链接可让您创建应用程序和 OAuth 凭据。 当我转到控制台并通过该屏幕创建它时,它似乎不起作用。 在尝试重新创建并使用新应用程序进行测试后,我发现您添加到授权 Javascript 起源的 URL 并不总是被添加。

如果一切正常,则该 url 应该在凭证页面中可用

【讨论】:

【参考方案3】:

就我而言,我只需要稍等一下,Google 就会考虑到来源。我不能确切地说花了多长时间。我等了~30分钟。然后我就去睡觉了,第二天早上它就开始工作了。

编辑:糟糕,我刚刚意识到我使用的是http:// 而不是https://。这才是真正的问题。

【讨论】:

【参考方案4】:

我遇到了同样的问题,我搜索了 3 天:解决“popup_closed_by_user”转到您的 console.google 转到您的 API 管理:凭据:修改您的凭据:

授权的Javascript来源(http://localhost:port); 授权重定向URI(http://localhost:port/auth/google/callback);

示例:||授权的Javascript来源(http://localhost:4200); 授权重定向 URI (http://localhost:4200/auth/google/callback)

【讨论】:

以上是关于Chrome 上的 Google Auth API Javascript idpiframe 初始化错误的主要内容,如果未能解决你的问题,请参考以下文章

Google+ JavaScript API 登录弹出窗口未在 iOS 上返回 Chrome

Auth.GOOGLE_SIGN_IN_API 不能与 Games.API 一起使用

使用 Google Chrome 和 PHP 5.3 进行会话

android在使用`FusedLocationApi`时在`LocationServices.API`和`Auth.GOOGLE_SIGN_IN_API`之间发生冲突

无需每次身份验证即可使用 Google Api 的任何方式?

如何在 Chrome 扩展程序 browser_action 中登录 Google?