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`之间发生冲突