给定的客户端 ID (GSI) 不允许使用给定的来源

Cro*_*row 130 javascript google-signin

我正在重构我的“使用 Google 登录”,将其替换gapigsion http://localhost:8080

声称如何才能gapi毫无问题地工作。gsiThe given origin is not allowed for the given client ID

在此输入图像描述

加皮

<script src="https://apis.google.com/js/api:client.js" async defer></script>
Run Code Online (Sandbox Code Playgroud)
<script src="https://apis.google.com/js/api:client.js" async defer></script>
Run Code Online (Sandbox Code Playgroud)

通用汽车公司

<script src="https://accounts.google.com/gsi/client" async defer></script>
Run Code Online (Sandbox Code Playgroud)
window.gapi.load('auth2', () => {
  const auth2 = window.gapi.auth2.init({ client_id })
  auth2.signIn().then(console.log)
})
Run Code Online (Sandbox Code Playgroud)

错误如下:The given origin is not allowed for the given client ID

Cro*_*row 362

我添加了没有端口的源来解决这个问题。

关键点:将http://localhosthttp://localhost:<port_number>添加到授权 JavaScript 来源框中以进行本地测试或开发。

来源:https ://developers.google.com/identity/gsi/web/guides/get-google-api-clientid

  • 对于那些可能尝试其他所有方法都没有机会的人来说,有一个快速提示:最好记住,由于某种原因,127.0.0.1 不起作用,并且会继续显示此错误,即使您在 Google 仪表板中注册它也是如此。但一旦你使用 localhost ,它就会开始工作。 (10认同)
  • @Venus713我在Chrome浏览器中遇到同样的问题 - http://localhost 和 http://localhost:8080 都被添加到授权的JavaScript起源中,并且客户端ID是正确的,但仍然是相同的错误。但是,相同的代码可以在隐身模式下运行。 (7认同)
  • @Venus713 检查您的开发 URL 是否完全相同。您可能使用 https,因此可能类似于“https://localhost:8080”和“https://localhost”。您还应该检查您使用的客户端 ID 是否正确。 (3认同)
  • 谢谢你的提示。我对这个问题感到疯狂,因为一切都按照解释进行了设置。但额外添加没有端口的 localhost 是我从来没有考虑过的。非常感谢这个:) (3认同)

clo*_*jas 42

Referrer-Policy如果您的服务器已设置为,也可能会发生这种情况no-referrer。Google 需要此 HTTP 标头,否则对https://accounts.google.com/gsi/buttonhttps://accounts.google.com/gsi/iframe/select的请求将响应 400 并产生该错误

如果使用头盔 - 以下配置将修复请求

referrerPolicy: {
  policy: 'strict-origin-when-cross-origin'
}
Run Code Online (Sandbox Code Playgroud)

有关推荐人策略的 MDN 文章

  • 哇...不敢相信其他地方没有提到这一点。解决了我的问题在 Django 中,这意味着在设置中设置 `SECURE_REFERRER_POLICY = "strict-origin-when-cross-origin"` (10认同)

ano*_*ifo 26

我遇到了同样的问题。由于某种原因,这里讨论的解决方案都不适合我。我通过将这些添加到 Google 云控制台中的授权来源解决了这个问题

  • http://localhost
  • http://localhost:<端口号>

  • 太奇怪了,即使我也在端口 3000 上,我也必须添加 `http://localhost` !很棒的收获!节省了我很多时间。 (6认同)

Jos*_*nce 20

来自 @Behzad 的评论值得它自己的答案:

由于某种原因,127.0.0.1 将无法使用,即使您在 Google 仪表板中注册也是如此。

但一旦你使用localhost,它就会开始工作。

我正在使用 Live Server for VSCode,并且必须查找如何更改它所服务的主机。

转到“代码”>“首选项”>“设置”>“实时服务器配置”>“主机”,并将其更改为本地主机。 在此输入图像描述

然后确保 localhost 已在您的 Google 仪表板中注册: 在此输入图像描述


小智 11

在测试此问题时找到了一种解决方案,因为尽管将站点域添加到了Authorised JavaScript origins

加载资源失败:服务器响应状态为 403 ()

[GSI_LOGGER]:给定的客户端 ID 不允许给定的源。

如果您使用的域名不是localhost,请确保您通过以下方式访问您的网站https(如果证书尚不可用,则使用自签名证书/如果在非生产环境中进行测试)。

  • 这是这个!谢谢。我使用了 127.0.0.1 并添加了 localhost 和 127.0.0.1 但它不起作用。通过本地主机输入时。没关系! (2认同)

Mak*_*ker 10

根据他们的文档,它说;

执行本地测试或开发时,必须将 http://localhost 和 http://localhost:<port_number> 添加到“授权 JavaScript 来源”框中。使用 http 和 localhost 时,Referrer-Policy 标头还必须设置为 no-referrer-when-downgrade。

根据您的情况,您似乎需要添加no-referrer-when-downgrade渲染按钮的指令