在本地主机上使用reCAPTCHA

420

我正在使用PHP开发网站,想在其中一个会话中进行人类验证。在开发过程中,我最初在本地运行系统,当准备好之后,我将把它放在某个域名上。

reCAPTCHA网站上说插件只能在给定的域名(和子域)上工作。

有没有办法在本地主机上使用reCAPTCHA插件?


1
如果事后添加了本地主机,请清除Cookie。 - Mike Flynn
26个回答

468

更新

原回答已不再正确。现在的开发者指南中写道:

“如果您想在开发过程中使用 'localhost',则必须将其添加到域名列表中。”

这只有在您使用 127.0.0.1/... 而非 localhost/... 访问 localhost 时才有效。

以下是原回答,仅供参考。


根据reCAPTCHA开发者指南

“默认情况下不再支持 localhost 域名。如果您希望继续为开发过程中的 localhost 提供支持,则可以将其添加到站点密钥支持域名列表中。请前往管理控制台更新您的受支持域名列表。我们建议为开发和生产使用不同的密钥,并在生产站点密钥上不允许使用 localhost。”

换句话说,只需使用相同的密钥即可。


10
我确认了那一页上是否有那些词语。但它已经不见了!在2015年,您可以在https://developers.google.com/recaptcha/docs/start找到上述引用。 - Joshua Plicque
15
这个答案是准确的,但有一个重要的注意事项让我困惑了:当从reCAPTCHA v1迁移到v2时,需要重新生成API密钥以使此消息消失。同样重要的是,如果你像我一样在本地/开发环境中通过将条目放入操作系统的“hosts”文件来设置测试域,则需要将这些“虚假”域添加到相应的reCAPTCHA帐户的允许域中,以解决“ERROR:site key的无效域”错误。 - Ben Johnson
6
当你的本地主机名不是“localhost”时,它就无法工作。 - Hexodus
14
谷歌似乎已经移除了在本地主机测试的功能。 - IrishChieftain
7
虽然本地主机名对我不起作用,但我能够使用127.0.0.1和*.xip.io地址。 - davidbates
显示剩余11条评论

176
这对我很有用:
reCAPTCHA文档中提取:
使用以下测试密钥,您将始终获得无验证码,并且所有验证请求都将通过。 网站密钥:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 秘密密钥:6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe reCAPTCHA小部件将显示警告消息,以声称它仅供测试目的。请勿将这些密钥用于生产流量。

1
如果这个停止工作了,我会转向 Automattic 的解决方案。你的解决方案是唯一让我不放弃这个烦人技术的东西。 - PJ Brunet
1
这似乎是“正确的答案”,因为它可以使您的开发环境与生产环境分离。 - ChronoFish
似乎这是一个罕见的信息,因为谷歌从未提供像这样脆弱的东西。 - aswzen
7
看起来那些密钥已经过期了。该链接会重定向到一个FAQ,提供更新的密钥:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe - Adam Zerner
4
请注意,这些是针对 reCAPTCHA v2 的,而不是 reCAPTCHA v3。常见问题解答建议您为测试 v3 创建自己的独立密钥对。 - nikobelia
1
如果您拥有Google账户,使用这些密钥就没有意义。只需转到https://www.google.com/recaptcha/admin,选择创建并注册本地主机和127.0.0.1即可。密钥对是特定于您的本地主机的,因此您不依赖于其他人的“本地主机”注册。 - RWC

112
请注意,从2016年开始,reCAPTCHA不再原生支持本地主机。 根据常见问题解答:

默认情况下不再支持本地主机域。如果您希望继续支持它们进行开发,可以将它们添加到受支持域名列表中以获取站点密钥。转到管理控制台以更新受支持域名列表。我们建议为开发和生产使用单独的密钥,并在生产站点密钥上不允许使用本地主机。

只需将localhost添加到您的站点域名列表中即可。

15
我已经添加了 localhost,但仍然出现错误消息“Localhost 不在此站点密钥支持的域列表中。” - aadi1295
9
您可能需要等待一个小时左右,以便谷歌更新其系统... - CC Inc
1
此外,如果您有许多项目并设置了Windows主机文件和VirtualHosts,例如在WAMP中可以在此处找到C:\ wamp \ bin \ apache \ Apache2.2.21 \ conf \ extra \ httpd-vhosts.conf,则注册您的项目ServerName。 经过测试,可以正常工作。 - Jeffz
@Jeffz hosts文件不仅适用于Windows系统 - 这是很好的通用建议。 - Nathan Hornby

93

非常简单:

  1. 前往您的Google reCAPTCHA管理面板
  2. localhost127.0.0.1 添加到新站点的域名中,如下图所示。

Enter image description here


更新:

如果您的问题是如何在Google网站上设置reCAPTCHA以在本地主机上使用它,那么它必须按照我上面写的方式进行,但如果您想知道如何在本地主机和网站主机上使用reCAPTCHA,并通过最少量的代码在您的控制器中防止一些代码,如 ConfigurationManager.AppSettings [“ReCaptcha:SiteKey”],那么我会在我的回答中为您提供这个额外的描述和代码。

您喜欢以下的GET和POST操作吗?

下面的代码支持reCAPTCHA,不需要任何其他处理reCAPTCHA的代码。

[HttpGet]
[Recaptcha]
public ActionResult Register()
{
    // Your code in the GET action
}

[HttpPost]
[Recaptcha]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterViewModel model, string reCaptcha_SecretKey){
   // Your code in the POST action
   if (!ModelState.IsValid || !ReCaptcha.Validate(reCaptcha_SecretKey))
   {
       // Your code
   }
   // Your code
}

View视图中:(参考链接)

@ReCaptcha.GetHtml(@ViewBag.publicKey)

@if (ViewBag.RecaptchaLastErrors != null)
{
    <div>Oops! Invalid reCAPTCHA =(</div>
}

使用方法:

A) 将以下ActionFilter添加到您的Web项目中:


public class RecaptchaAttribute : FilterAttribute, IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var setting_Key = filterContext.HttpContext.Request.IsLocal ? "ReCaptcha_Local" : "ReCaptcha";
        filterContext.ActionParameters["ReCaptcha_SecretKey"] = ConfigurationManager.AppSettings[$"{setting_Key}:SecretKey"];
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var setting_Key = filterContext.HttpContext.Request.IsLocal ? "ReCaptcha_Local" : "ReCaptcha";
        filterContext.Controller.ViewBag.Recaptcha = ReCaptcha.GetHtml(publicKey: ConfigurationManager.AppSettings[$"{setting_Key}:SiteKey"]);
        filterContext.Controller.ViewBag.publicKey = ConfigurationManager.AppSettings[$"{setting_Key}:SiteKey"];
    }
}

B) 将 reCAPTCHA 设置密钥添加到您的 webconfig 文件中,分别对 localhostwebsite 进行设置,如下所示:

<appSettings>

    <!-- RECAPTCHA SETTING KEYS FOR LOCALHOST -->
    <add key="ReCaptcha_Local:SiteKey" value="[Localhost SiteKey]" />
    <add key="ReCaptcha_Local:SecretKey" value="[Localhost SecretKey]" />
    <!-- RECAPTCHA SETTING KEYS FOR WEBSITE -->
    <!--<add key="ReCaptcha:SiteKey" value="[Webite SiteKey]" />
    <add key="ReCaptcha:SecretKey" value="[Webite SecretKey]" />-->

    <!-- OTHER SETTING KEYS OF YOUR PROJECT -->

</appSettings>

注意:通过这种方式,您不需要在 post action 或任何 ViewBag 中手动设置 reCaptcha_SecretKey 参数以便为reCaptcha设置。在运行时,所有这些都将自动填充为适当的值,具体取决于您是在本地主机还是网站上运行项目。


你应该得到一个饼干!我们一直在苦苦挣扎,因为出现了“localhost不受支持”的错误,最终最简单的方法是同时添加localhost127.0.0.1。感谢你。 - Megajin

25

当您在Google reCAPTCHA中添加域名时:

添加新域名:

本地主机,而非localhost

“L”是大写字母。


3
大小写不影响结果。我刚刚测试了一下,在reCaptcha v3中添加Localhostlocalhost没有任何区别。 - jstuardo
1
已使用Recaptcha v2进行测试。本地主机和localhost都无法保存。 - Ryan B
“Localhost” 中的大写字母 “L” 真的很重要吗?你确定吗? - Peter Mortensen
v3 版本需要大写字母 L,我之前不知道 :/ - cman77
确认,大写的L会有所不同。 - Lukas

21

截至2021年1月2日,Google在这篇文章中发布了两个测试用的密钥。

我想要使用reCAPTCHA进行自动化测试。我该怎么做? 对于reCAPTCHA v3,请创建一个单独的测试环境密钥。由于reCAPTCHA v3依赖于真实流量,得分可能不准确。

对于reCAPTCHA v2,请使用以下测试密钥。您将始终获得“无验证码”,并且所有验证请求都将通过。

Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

reCAPTCHA小部件将显示警告消息,以确保不用于生产流量。

第一次使用密钥生成的电子邮件进入了垃圾邮件文件夹。


这些密钥在他们的文档中,但由于它们仅适用于reCAPTCHA v2,它们不再太有效。我无法想象如果你今天正在开发,那么更换到v3比解决v2问题更容易。 - Jamie Marshall

10

移除当前的 reCAPTCHA 密钥,注册新密钥,并使用这些域名设置您的密钥设置

127.0.0.1
localhost

8
谷歌最近停止默认允许localhost(即@Artur Cesar De Melo所提到的内容)。这在他们的常见问题解答中有说明: “我遇到了一个错误 "Localhost is not in the list of supported domains"。以前它是可以工作的,我该怎么办?” 本地主机域名不再默认支持。如果您希望继续进行开发支持,可以将其添加到受支持域名列表中。请转到管理员控制台更新受支持域名列表。我们建议为开发和生产各创建一个密钥,并不允许在生产站点密钥上使用localhost。 1:为您的开发环境创建一个单独的密钥 2:将127.0.0.1添加到允许域名列表中 3:保存更改并等待30分钟以使更改生效

7

4
为什么要大写("LOCALHOST")? - Peter Mortensen

6
最新更新2022 默认情况下不支持本地主机域名。如果您希望继续为开发支持它们,可以将它们添加到您的站点密钥支持的域列表中。 https://developers.google.com/recaptcha/docs/faq#im-getting-an-error-localhost-is-not-in-the-list-of-supported-domains.-what-should-i-do 我添加了“localhost”,它完美地工作了。 Google Repatcha Localhost 或者
对于reCAPTCHA v2,请使用以下测试密钥。您将始终获得无验证码,并且所有验证请求都将通过。
Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

Reference


哇,几个小时后...这个起作用了。请问这些键是怎么起作用的? - mimros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接