ChatGPT解决这个技术问题 Extra ChatGPT

Google Maps JavaScript API RefererNotAllowedMapError

我们正在尝试为我们的一个客户开发一个地理定位应用程序,我们希望首先在自己的域中对其进行测试。

我们已经签署了 Google Maps JavaScript API,并且我们拥有一个有效的浏览器密钥,并且我们的域 www.grupocamaleon.com 已被授权使用该密钥。

但是我们甚至无法制作最简单的示例以无错误地运行。

在我们的领域和我们的密钥中,我们有以下演示:

(1) http://www.grupocamaleon.com/boceto/aerial-simple.html

但它不起作用,Firebug 控制台说:

“Google Maps API 错误:Google Maps API 错误:RefererNotAllowedMapError(链接到有关 RefererNotAllowedMapError 的 Google 文档)您要授权的站点 URL:(1)”

我的凭证页面缺少添加推荐人接受的可能性,因此涉及添加推荐人的解决方案现在是不可能的。

我的凭证页面:

https://i.stack.imgur.com/j4pPr.jpg

为什么我们会得到这个错误?我们该如何解决?

Google maps API referrer not allowed 的可能重复项。 Your code works for me(使用我的密钥),因此您的密钥、允许的推荐人或启用与它一起使用的服务有问题。
但是我的凭据页面中没有这种可能性,正如您在我的回答中看到的那样。有什么提示吗?
好吧,我是一个新手,我还不知道如何正确使用这个网站。给您带来的不便深表歉意。我已经编辑了我的问题,在我的凭证页面上添加了信息。引用的一些解决方案涉及添加推荐人,这是我目前无法做到的。
如果您无法更改密钥的引用者,请将其删除或替换为您控制的引用者。不需要密钥,但包含一个密钥有好处。
我创建了没有APP或API限制的新密钥,它说expiredKey 10分钟,然后开始工作。接下来,我尝试仅添加 Places API,但它是从网络调用的,并说:Google Maps JavaScript API error: RefererNotAllowedMapError 即使在等待之后。然后我尝试了Maps JavaScript API,它一直在说RefererNotAllowedMapError,尝试刷新页面,2分40秒后它终于开始工作了。所以小心点。但是没有任何东西对我有用,只有 Maps JavaScript API 也是如此。你只需要等待很多。

p
powerbuoy

我知道这是一个已经有几个答案的老问题,但我遇到了同样的问题,对我来说,问题是我遵循了 console.developers.google.com 上提供的示例并以 *.domain.tld/* 格式输入了我的域。这根本不起作用,我尝试为此添加各种变体,例如 domain.tlddomain.tld/**.domain.tld 等。

为我解决的问题是也添加了实际的 protocolhttp://domain.tld/* 是它在我的网站上运行所需要的唯一一个。如果我要切换到 HTTPS,我想我需要添加 https://domain.tld/*

更新:Google 终于更新了占位符,现在包括 http

https://i.stack.imgur.com/uMAPk.png


我确认:允许我使用 API 的唯一组合是 http://www.---.com/*
这个答案是唯一让我的代码工作的答案。我可以确认 Google 提供的示例不起作用。
感谢@Google 向我们提供虚假信息。 http://----.com/* 是正确的格式。
如果您有多个子域,您可以使用 http://*.example.com 和 https://*.example.com 来覆盖所有基础
也许谷歌更新了这个功能——对我来说,它可以在没有协议的情况下工作。我在设置字段中有 example.com/*,它从 https://example.com/map 开始工作
R
Rick James

来吧谷歌,你们比 API 凭证页面更聪明。 (我知道是因为我有两个儿子在那里工作。)

“推荐人”列表比它所显示的要挑剔得多。 (当然,它应该更宽容。)以下是我花了几个小时才发现的一些规则:

列表中的顺序很重要。将您的 URL 在列表中向上移动可能会使其正常工作。

“http://”前缀是必需的。

甚至“localhost”也需要它:“http://localhost/foo/bar.html”

尾随 * 作为通配符似乎可以像字符串比较一样工作。

即使使用“http://localhost/foo/bar.html”,“http://localhost/foo/bar.html?arg=1”也不起作用。 (通配符会有帮助吗?)

对于两个产品开发人员,有(至少)两行:“http://localhost/foo/bar.html”和“http://my.site.com/foo/bar.html”

似乎不需要端口号(8085?4000?)。

可能还有其他规则,但这是一个乏味的猜谜游戏。


关于编辑前的答案,我也没有耐心了。看起来通配符 (*) 仅在地址末尾 (http://my.site.com/*) 或子域 (http://*.site.com) 中有效。在所有其他情况下,它不起作用
我错误地设置了仅允许 Places API(引荐来源限制旁边的选项卡)的限制。这会导致相同的 RefererNotAllowedMapError 错误。
添加万维网。到我的域名为我修复它。我不确定在域末尾添加通配符 (*),例如 (https://www.my-site.com/*) 是否也解决了该问题。
我的 ionic 移动应用程序的域为 ionic://app#/tabs。我如何将其包含在限制中。我尝试了很多组合,但都是徒劳的。例如:ionic://app#/tabs、httpionic://app#/tabs、httpsionic://app#/tabs、ionic://*、ionic://app#/*、httpionic://*、 ……
@AUK4SO - 井号 (#) 在 url 中具有特殊含义。见<a name=...>。还是您的意思是 iconic://1234/foo
D
Daniel Loureiro

子域部分不允许使用通配符(星号)。

错误:*.example.com/*

右:example.com/*

忘记谷歌在占位符上说什么,这是不允许的。


那么如何添加以下内容:sc.maindomain.com/Survey/UpdateInspection/102
您可以设置为sc.maindomain.com/*
T
TRose

根据文档,“RefererNotAllowedMapError”表示

当前加载 Google Maps JavaScript API 的 URL 尚未添加到允许的引荐来源列表中。请在 Google Developers Console 上检查您的 API 密钥的引用设置。

我为我自己的个人/工作用途设置了 Google Maps Embed API,到目前为止还没有指定任何 HTTP 引荐来源网址。我没有注册任何错误。您的设置必须让 Google 认为您访问的 URL 未注册或未允许。

https://i.stack.imgur.com/9cqCk.png


P
Putu De

请注意,如果您只是更改它,设置可能需要长达 5 分钟才能生效。


o
ow3n

我尝试了许多引荐来源网址变体并等待了 5 分钟,直到我意识到 Google 在表单字段中填充的示例存在缺陷。他们展示:

*.example.com/*

但是,仅当您的域名前有 subdomain.www. 时才有效。以下内容立即为我工作(省略了谷歌示例中的领先时期):

*example.com/*

坏主意 - 有人可以创建 hackexample.com 并使用您的 api
@HyderA - 更有可能的是,有人会注册一堆免费的谷歌账户来获得额外的地图加载。
@HyderA 他们仍然需要钥匙,所以机会不大。但你是对的,仍然存在潜在风险。
我的 ionic 移动应用程序的域为 ionic://app#/tabs。我如何将其包含在限制中。我尝试了很多组合,但都是徒劳的。例如:ionic://app#/tabs、httpionic://app#/tabs、httpsionic://app#/tabs、ionic://*、ionic://app#/*、httpionic://*、 ……
C
Community

根据 google docs,这是因为您在其上使用 Google Maps API 的 url,它 not registeredlist of allowed referrers

编辑 :

来自Google Docs

指定域的所有子域也被授权。如果 http://example.com 被授权,那么 http://www.example.com 也被授权。反之则不然:如果 http://www.example.com 被授权,则 http://example.com 不一定被授权

所以,请配置 http://testdomain.com 域,然后您的 http://www.testdomain.com 将开始工作。


在我的情况下,域的 DNS 配置错误。例如: www.testdomain.com 工作正常 testdomain.com 没有工作导致错误
这似乎是颠倒的逻辑?除非我错过了什么。
D
David Robertson

检查您是否也启用了正确的 APIS。

我尝试了以上所有方法,星号、域 tld、正斜杠、反斜杠和所有内容,即使最后只输入一个 URL 作为最后的希望。

所有这些都不起作用,最后我意识到 Google 还要求您现在指定要使用的 API(见屏幕截图)

https://i.stack.imgur.com/33vos.jpg

我没有启用我需要的那些(对我来说是 Maps JavaScript API)

一旦我启用它,一切正常使用:

http://www.example.com/*

我希望对某人有所帮助! :)


D
Darren Murphy

问题
Google 建议使用格式*.example.com/*
此格式无效。

解决方案
检查浏览器控制台是否存在 Google Maps JavaScript API 错误:RefererNotAllowedMapError
在错误下方应该有:“您要授权的站点 URL:https://example.com/"
使用该 url 作为引荐来源网址并在其末尾添加通配符 *(在本例中为 https://example.com/*)。


嘿,我尝试了这个以及我在 SO 上找到的所有其他变体,但没有任何运气。 2021年有什么变化吗?
在 2022 年,这个答案正在发挥作用。 https://yoursite.com/* , https://*.yoursite.com/* 您必须同时添加这两个。这应该是工作。
h
hiroshi

我发现即使您的 HTTP Referreres 也足够有效,错误的 API Restrictions 集会导致 Google Maps JavaScript API error: RefererNotAllowedMapError

例如:

您正在使用 Javascript API 作为密钥。

将 http://localhost/* 添加到应用程序限制/HTTP 引用

选择 Maps Embed API 而不是 Maps Javascript API

这会导致 RefererNotAllowedMapError


是的,就我而言,错误分类是问题所在
但是安全呢?如果我允许 localhost ,任何人都可以在 localhost 中使用我的密钥吗?
d
dakab

多年来有很多假设的解决方案,有些不再起作用,有些从未起作用,因此我的最新工作是在 2018 年 7 月结束。

设置:

Google Maps JavaScript API 必须能够正常工作……

多个域调用 API:example.com 和 example.net

任意子域:user22656.example.com 等。

安全和标准 HTTP 协议:http://www.example.com/ 和 https://example.net/

不定路径结构(即大量不同的 URL 路径)

解决方案:

实际使用占位符的模式:://*.example.com/*。

不省略协议,而是为每个域添加两个条目(每个协议一个)。

子域的附加条目(以 *. 开头的主机名)。

我感觉使用正确的配置(并且等待了足够的时间)仍然会出现 RefererNotAllowedMapError 错误。我删除了凭证密钥,重复了请求(现在得到了 InvalidKeyMapError),创建了新的凭证(使用完全相同的设置),从那以后它就一直在工作。

仅添加协议和域似乎不包括子域。

对于其中一个域,工作配置如下所示:

https://i.stack.imgur.com/b1ZxO.png

(如文字:)

Accept requests from these HTTP referrers (web sites)
    https://*.example.com/*
    https://example.com/*
    http://*.example.com/*
    http://example.com/*

就我而言,此解决方案有所帮助,但对错误的 API 有 API 限制。由于某种原因,返回了相同的错误消息。将 API 限制从“Places API”更改为“Maps Javascript API”解决了这个问题。
删除密钥并创建一个对我有用的新密钥
O
Owen Masback

直到我发现 RefererNotAllowedMapError 可能是由于没有与项目关联的结算帐户导致的,这些修复对我都不起作用。因此,请确保激活您的免费试用版或其他任何内容。


p
php-b-grader

这是另一个糟糕的谷歌产品,实施很糟糕。

我发现的问题是,如果您通过 IP 地址限制 API 密钥,它将无法工作......但谷歌远非要明确这一点......直到故障排除和研究我发现:

具有 IP 地址限制的 API 密钥只能用于旨在从服务器端使用的 Web 服务(例如地理编码 API 和其他 Web 服务 API)。大多数这些网络服务在 Maps JavaScript API 中都有等效服务(例如,请参阅地理编码服务)。要使用 Maps JavaScript API 客户端服务,您需要创建一个单独的 API 密钥,该密钥可以通过 HTTP 引用者限制进行保护(请参阅限制 API 密钥)。

https://developers.google.com/maps/documentation/javascript/error-messages

FFS Google...非常重要的信息,可以很好地澄清设置...


f
flavio.donze

https://i.stack.imgur.com/YOWcO.jpg

接受来自这些 HTTP 引荐来源网址(网站)的请求

写localhost目录路径


根据谷歌的文字,它应该是一个可选属性,如果它为空,它应该可以工作
@ayanchakraborty - 我尝试了 localhost/index.html (和各种路径)的 10 种不同组合以及 file:///android_assets/www/index.html 的各种组合 - 但没有任何效果。控制台中的 RefererNotAllowedMapError 向我显示:您要授权的站点 URL:__file_url__//android_asset/www/index.html#/tab/map////` - 但是这个和变体也不起作用。
J
Jaime Montoya

我遇到了同样的错误:

https://i.stack.imgur.com/TT4sH.png

此链接讨论如何设置 API 密钥限制:https://cloud.google.com/docs/authentication/api-keys#adding_http_restrictions

就我而言,问题是我使用了这个限制:

HTTP 引用者(网站)接受来自这些 HTTP 引用者(网站)的请求(可选)使用 * 表示通配符。如果您将此留空,则将接受来自任何推荐人的请求。请务必在生产中使用此密钥之前添加引荐来源网址。 https://*.example.net/*

这意味着诸如 https://www.example.nethttps://m.example.nethttps://www.example.net/San-salvador/ 之类的 URL 可以工作。但是,诸如 https://example.nethttps://example.nethttps://example.net/San-salvador/ 之类的 URL 将不起作用。我只需要添加第二个推荐人:

https://example.net/*

这解决了我的问题。


P
Pare

我添加了 2 个网站域,在子域中设置“*”不起作用,但特定子域“WWW”和非子域已使用相同的 Google Map API 密钥为我的网站工作。

dont' use "*" in subdomain

希望它有所帮助。


C
Community

您的计费已启用您的网站已添加到 Google 控制台您的网站已添加到您应用中的引荐来源网址。 (为 www 和 none www 做一个通配符)

http://www.example.com/* 和 http://example.com/*

启用了 Javascript 地图并且您使用了正确的凭据 该网站已添加到您的 DNS 以启用上面的 Google 控制台。工作后微笑!


您可以在 Google Cloud Platform 网络控制台 (console.cloud.google.com) 的 APIs & Services > Credentials > (your key) > Application restrictions > HTTP Referrers 下找到您的允许引荐来源网址列表
I
ITwrx

您显示您的 api 凭据页面的屏幕截图,但您必须单击“浏览器密钥 1”并从那里添加引荐来源网址。


R
Radmation

对于更深的嵌套页面

例如,如果您在文件夹中有项目或嵌套页面

http://yourdomain.com/your-folder/your-page 您可以在其中输入

http://yourdomain.com/*/*

重要的部分是 /*/*/* 取决于您需要走多远

似乎 * 不会匹配 / 或进入更深的路径..

这将为您提供完整的域访问权限,除非您有比这更深的嵌套..


F
FMCorz

我也努力做到这一点,但这里有一些建议:

设置为引用的 URL 包括 http,例如 http://example.com/*

Google Maps JavaScript API 已启用

已为此帐号设置了结算信息

解决上述所有问题后,地图将按预期显示。


a
ahgood

为 Google 项目启用计费解决了该问题。


S
Shingai Munyuki

http://www.example.com/* 经过几天和几天的尝试后对我有用。


佚名

通过使用 Google 的提示,我终于开始工作了:(https://support.google.com/webmasters/answer/35179)

这是我们对域和站点的定义。这些定义特定于 Search Console 验证:

http://example.com/ - A site (because it includes the http:// prefix)
example.com/ - A domain (because it doesn't include a protocol prefix)
puppies.example.com/ - A subdomain of example.com
http://example.com/petstore/ - A subdirectory of http://example.com site

b
brad

我试图使用 Places API(自动完成)并且还必须在 Google Cloud Console 中启用 Maps Javascript API,然后 Places API 才能工作。


N
Nalaskow

在现场检查您的声明。要加载 Google Maps JavaScript API,请使用这样的脚本标记

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"
async defer></script>

我在我的 Wordpress 网站上的 function.php 文件中使用了这个声明

wp_enqueue_script("google-maps-v3", "//maps.google.com/maps/api/js?key=YOUR_API_KEY", false, array(), false, true);

我已经在这种格式上设置了 API 密钥,它的工作正常

http://my-domain-name(without www).com/*

这个声明不起作用

*.my-domain-name.com/*

R
Robot Boy

删除限制(无)对我有用。


删除限制被认为是不好的做法,并使您的 API 易受攻击。
@mtness 显然是的,但海报已经先尝试过了,但没有成功。不幸的是,谷歌的文档不再有用。这里的每一个答案都带来了新的提示,这几乎就像一个猜谜游戏......
R
RationalRabbit

在我的经验中

http://www.example.com

工作正常但是,最后需要 https /*


K
KJB

Chrome 的 Javascript 控制台建议我在我的 HTTP 引用列表中声明整个页面地址,在这种情况下 http://mywebsite.com/map.htm 即使确切地址是 http://www.mywebsite.com/map.htm - 我已经按照其他人的建议列出了通配符样式,但这是唯一的方法为我工作。


T
Tahir77667

这对我有用。 api键设置下有2大类限制:

应用限制

API 限制

应用限制:

在“推荐人”部分的底部添加您的网站网址“http://www.grupocamaleon.com/boceto/aerial-simple.html”。根据各种要求,该部分的右侧有示例规则。

https://i.stack.imgur.com/f7UC9.png

API 限制:

在 API 限制下,您必须从下拉列表中明确选择“Maps Javascript API”,因为我们的唯一密钥将仅用于调用 Google 地图 API(可能)并保存它,如下图所示。我希望这对你有用.....对我有用

https://i.stack.imgur.com/3dxoQ.png

检查你的脚本:

此外,由于脚本标签内的键输入不正确,可能会出现问题。它应该是这样的:

  <script async defer src="https://maps.googleapis.com/maps/api/jskey=YOUR_API_KEY&callback=initMap"
  type="text/javascript"></script>

n
nitin.k

如果您在 localhost 上工作,则不要在 url 中包含 http 或 https。

使用没有协议的“localhost”。我挣扎了几天,发现它起作用了。