【问题标题】:Using reCAPTCHA on localhost在本地主机上使用 reCAPTCHA
【发布时间】:2011-03-15 01:23:38
【问题描述】:

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

reCAPTCHA website 中,据说该插件只能在给定的域(和子域)中工作。

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

【问题讨论】:

  • 如果您事后添加了 localhost,请清除 cookie。

标签: localhost recaptcha


【解决方案1】:

更新

原来的答案不再正确。开发者指南现在指出:

“如果您想使用“localhost”进行开发,则必须将其添加到域列表中。”

这仅在您使用127.0.0.1/... 而不是localhost/... 访问本地主机时有效。

原始答案保留在下面。


根据the reCAPTCHA Developer's Guide

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

换句话说,只需使用相同的键。

【讨论】:

  • 我检查了这些词是否在那个页面上。它不见了! 2015年可以找到以上引用@developers.google.com/recaptcha/docs/start
  • 这个答案是准确的,但有一个重要的警告让我感到困惑:从 reCAPTCHA v1 迁移到 v2 时,必须重新生成 API 密钥才能使此消息消失。此外,同样重要的是,如果您像我一样,并且通过将条目放入操作系统的“主机”文件中来在本地/开发环境中设置测试域,则需要将这些“假”域添加到允许的域中有问题的 reCAPTCHA 帐户来解决“错误:站点密钥的域无效”错误。
  • 当你的 localhost 没有被命名为“localhost”时,它就不起作用了。
  • Google 似乎已经取消了在 localhost 上进行测试的功能。
  • 虽然 localhost 对我不起作用,但我可以同时使用 127.0.0.1 和 *.xip.io 地址。
【解决方案2】:

这对我有用:

摘自reCAPTCHA documentation:

使用以下测试密钥,您将始终获得 No CAPTCHA 和所有 验证请求将通过。

网站密钥:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI

密钥:6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

reCAPTCHA 小部件将显示一条警告消息,声称它是 仅用于测试目的。请不要将这些密钥用于您的 生产流量。

【讨论】:

  • 如果这停止工作,我将切换到 Automattic 的解决方案。您的解决方案是唯一让我无法放弃这种烦人的技术的原因。
  • 这似乎是“正确答案”,因为它使您的开发环境与生产环境不同。
  • 似乎是一个罕见的信息,因为谷歌从不提供像这样脆弱的东西
  • 看起来那些键已经过时了。该链接重定向到提供更新密钥的FAQ6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
  • 另请注意,这些适用于 reCAPTCHA v2,而不是 reCAPTCHA v3。常见问题解答建议您制作自己的单独密钥对以针对 v3 进行测试。
【解决方案3】:

请注意,截至 2016 年,reCAPTCHA doesn't naively support localhost anymore。来自常见问题解答:

默认情况下不再支持本地主机域。如果你想 继续支持他们的发展,您可以将他们添加到列表中 您的站点密钥支持的域数。转到管理控制台 更新您支持的域列表。我们建议使用单独的密钥 用于开发和生产,并且不允许 localhost 在您的 生产站点密钥。

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

【讨论】:

  • 我添加了localhost,但仍然出现错误“Localhost 不是此站点密钥支持的域列表。”
  • @ArbazAbid 您可能需要等待一个小时左右 google 才能更新他们的系统...
  • 另外,如果你有很多项目并且你设置了 Windows 主机文件和虚拟主机,例如在 WAMP 中可以在这里找到 C:\wamp\bin\apache\Apache2.2.21\conf\extra\httpd-vhosts.conf,然后注册你的项目 ServerName。经过测试,工作正常。
  • @Jeffz 主机文件不是特定于 Windows 的 - 这是一个很好的一般建议。
【解决方案4】:

很简单:

  1. 转到您的google reCAPTCHA adminstration panel
  2. localhost127.0.0.1 添加到新网站的域中,如下图所示。


更新:

如果您的问题是如何在 Google 网站上设置 reCAPTCHA 以便在 localhost 中使用它,那么就像我在上面写的那样,但是如果您很好奇如何在 both 上使用 reCAPTCHA localhostwebsite host您的控制器中的最少代码 并防止其中包含 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
}

查看: (reference)

@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) 在您的webconfig 文件中添加localhostwebsite 的reCAPTCHA 设置密钥,如下所示:

<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>

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

【讨论】:

    【解决方案5】:

    当您在 Google reCAPTCHA 中添加 时:

    添加新域:

    本地主机,而不是本地主机

    “L”是大写字母。

    【讨论】:

    • 字母大小写无关紧要。我刚刚测试过。添加Localhostlocalhost也是一样的。至少,在 reCaptcha v3 中。
    • 用 Recaptcha v2 测试了这个。本地主机和本地主机都不会保存。
    • “Localhost”中的大写“L”真的很重要吗?你确定吗?
    • 我需要 v3 上的大写 L:/
    【解决方案6】:

    自 2021 年 1 月 2 日起,Google 将这两个密钥发布在 this article 中进行测试。

    我想使用 reCAPTCHA 运行自动化测试。我该怎么办? 对于 reCAPTCHA v3,为测试环境创建一个单独的密钥。分数可能不准确,因为 reCAPTCHA v3 依赖于查看真实流量。

    对于 reCAPTCHA v2,请使用以下测试密钥。您将永远不会收到验证码,并且所有验证请求都会通过。

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

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

    在我第一次使用密钥时,生成的电子邮件进入了垃圾邮件。

    【讨论】:

    • 这些密钥在他们的文档中,但由于它们仅适用于 reCAPTCHA v2,因此它们不再有效。我无法想象如果你今天正在开发,仅仅切换到 v3 并不比解决 v2 更容易。
    【解决方案7】:

    删除当前的 reCAPTCHA 密钥,注册新密钥,并使用以下域设置您的 密钥设置

    127.0.0.1
    localhost
    

    【讨论】:

      【解决方案8】:

      Google 最近已停止默认允许使用 localhost(正如 @Artur Cesar De Melo 所触及的那样)。这是他们的常见问题解答:

      我收到错误消息“本地主机不在支持的域列表中”。以前可以,请问怎么办?

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

      1:为您的开发环境创建一个单独的密钥

      2:将 127.0.0.1 添加到允许的域列表中

      3:保存更改并等待最多 30 分钟让更改生效

      【讨论】:

        【解决方案9】:

        根据Google's reCAPTCHA documentation

        默认情况下不再支持 localhost 域。如果你想 继续支持他们的发展,您可以将他们添加到列表中 您的站点密钥支持的域数。转到管理控制台 更新您支持的域列表。我们建议使用单独的密钥 用于开发和生产,并且不允许 localhost 在您的 生产站点密钥

        【讨论】:

          【解决方案10】:

          reCAPTCHA 不适用于 localhost/

          使用127.0.0.1/ 而不是localhost/

          【讨论】:

          • 这个答案与接受的答案有何不同?
          • 它是公认的更简单的版本。两个答案在接受的一个中都不正确。对于 1) 您不需要将 localhost 添加到接受的域列表中。对于 2) 它不适用于 localhost。
          • May 2021:不要在姓名或地址后面加任何字符,google会抛出错误The following domain is invalid: 127.0.0.1/. A valid domain requires a host and must not include any protocol, path, port, query or fragment.
          【解决方案11】:
          1. https://www.google.com/recaptcha/admin

            注册您的网站
          2. 添加 JavaScript 插件

          3. 添加由 Google 提供的类和您的站点密钥

          【讨论】:

            【解决方案12】:

            localhost 现在可以工作了。但是,请记住,将 localhost 添加到域名列表后,最多需要 30 分钟才能生效(根据针对域名列表显示的帮助提示)。

            【讨论】:

              【解决方案13】:

              在您的 Google reCAPTCHA 网站 (https://www.google.com/recaptcha/admin/site/{siteid}/settings) 的域列表中,添加 LOCALHOST

              如果上述方法不起作用,请尝试添加127.0.0.1

              【讨论】:

              • 为什么是大写(“LOCALHOST”)?
              【解决方案14】:

              如果您有旧密钥,则应重新创建 API 密钥。还要注意代理。

              【讨论】:

              • 代理有什么问题?代理需要允许从 Google API 返回通信?
              • @SQLDBA 配置不正确或新位置(IP)来自制裁国家,可能会导致一些问题。
              【解决方案15】:

              你可以写“localhost”或“127.0.0.1”,但URL必须相同。

              示例:Google Domains 添加 -> localhost URL => localhost/login.php

              示例:Google Domains 添加 -> 127.0.0.1 URL => 127.0.0.1/login.php

              【讨论】:

                【解决方案16】:

                我最近正在创建一个涉及 reCAPTCHA v2 的网站,我需要在我的本地主机上进行测试自动化。我没有在 reCAPTCHA 管理门户中添加任何 IP 地址或 localhost

                按照以下步骤进行

                1. 登录到 reCAPTCHA 管理站点。 Screenshot

                2. 找到按键设置

                3. 点击高级设置

                4. 域名验证下,取消选中验证 reCAPTCHA 解决方案的来源复选框。此选项用于验证来自上述域之一的请求。

                  请注意,如果禁用,您需要在验证解决方案时检查服务器上的主机名。


                我创建了一个新密钥,禁用了它,并使用这个密钥在 localhost 中进行测试。

                这是a sample page,它为 cmets 实现了 reCAPTCHA。

                【讨论】:

                  【解决方案17】:

                  截至 2021 年的今天,Google reCAPTCHA Enterprise 版控制台包含一项验证检查,不允许允许将 localhost 添加到允许的域列表中。为了解决这个问题(显然仅用于开发/测试目的)为我做以下工作:

                  1. 在您的hosts file 中创建一个条目,将您的域解析为您的本地主机

                    127.0.0.1    whatever-your-domain-will-be.com
                    
                  2. 不是通过导航到 localhost,而是通过导航到您的域来测试您的应用程序。

                  我的本​​地服务器/应用程序通常会在 http://localhost:4000 上运行,因此导航到 http://whatever-your-domain-will-be.com:4000 就可以了。

                  部署或测试完成后,很容易删除 hosts 文件条目,并且在 reCAPTCHA 允许的域列表中没有残留的垃圾。

                  【讨论】:

                    【解决方案18】:

                    这可能有助于所有在本地主机上遇到 reCAPTCHA 问题的用户。谷歌确实说“默认情况下,所有密钥都在 'localhost'(或 '127.0.0.1')上工作”,但实际上在 localhost 上使用 reCAPTCHA 可能会导致问题。就我而言,我使用secure tokens 解决了它。

                    I posted a working solution for PHP here.

                    【讨论】:

                      【解决方案19】:

                      出于测试目的,如果您想在 localhost 上测试包含 reCAPTCHA 的网页,请在域列表中添加 localhostAdmin Console@ 987654323@:https://www.google.com/recaptcha/admin。 *建议为 localhost 创建一个单独的站点密钥。

                      Admin Console Screenshot

                      CAPTCHA Output

                      【讨论】:

                        【解决方案20】:

                        对我有用的方法是使用我的外部 IP 地址。

                        如果你不知道它是什么,只需谷歌“我的 IP 是什么”

                        然后使用您的 IP 地址并在您的域中为验证码设置它,它应该开始正常工作。

                        【讨论】:

                          【解决方案21】:

                          如果你使用的是 Laravel,那么你应该重启你的服务器 并运行以下两个命令:

                          php artisan config:clear
                          
                          php artisan cache:clear
                          

                          【讨论】:

                            【解决方案22】:

                            对我来说,它删除了我的实际配置并创建了一个新配置,添加了这样的域:

                            【讨论】:

                            • 这很危险。您不应将本地地址和公共地址列入白名单。如果我访问您的站点,我可以轻松地绕过您重新验证,因为我的计算机(和任何计算机)可以是 127.0.0.1。如果您想知道谁会这样做,我在媒体工作,我可以肯定地告诉您,网络上的许多恶意机器人都会这样做。
                            • 当然,但我这样做只是为了开发目的。在 prod 上,显然这将被改变。谢谢你的建议! :)
                            • 是的,但是您在屏幕抓取中列出了一个公共 IP。说真的,这是一种利用。如果您在某处托管集成或测试系统,请为此使用新的验证码。对于您的本地框,仅使用 localhost 和 127.0.0.1。当我们谈论 recaptcha 时,它不是最严重的漏洞,但它暗示了不那么谨慎的安全实践。只有一个人的意见。
                            【解决方案23】:

                            我在Laravel 网站上收到与 reCAPTCHA 相关的错误。我通过使用一些命令和一个 env 文件解决了这个问题,以前的答案也将有助于解决这个问题。

                            首先,检查 Google reCAPTCHA 密钥的 env 文件(在您的情况下是具有 Google reCAPTCHA 密钥的文件)。

                            其次,运行这些命令:

                            1. php artisan config:clear
                            2. php artisan cache:clear
                            3. composer dump-autoload
                            4. php artisan view:clear
                            5. php artisan route:clear

                            它会解决你的问题。

                            【讨论】:

                            • 这不是关于 reCaptcha 的问题,缓存问题,这是关于在开发环境(localhost 域)下使用它。
                            猜你喜欢
                            • 2022-10-21
                            • 1970-01-01
                            • 2015-02-25
                            • 2011-05-30
                            • 2019-02-05
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-03-20
                            相关资源
                            最近更新 更多