【发布时间】:2011-03-15 01:23:38
【问题描述】:
我正在使用 PHP 开发一个网站,我想在其中一个会话中进行人工验证。对于开发,我最初在本地运行系统,当它准备好后,我将把它放在某个域上。
在reCAPTCHA website 中,据说该插件只能在给定的域(和子域)中工作。
有没有办法在本地主机上使用 reCAPTCHA 插件?
【问题讨论】:
-
如果您事后添加了 localhost,请清除 cookie。
我正在使用 PHP 开发一个网站,我想在其中一个会话中进行人工验证。对于开发,我最初在本地运行系统,当它准备好后,我将把它放在某个域上。
在reCAPTCHA website 中,据说该插件只能在给定的域(和子域)中工作。
有没有办法在本地主机上使用 reCAPTCHA 插件?
【问题讨论】:
原来的答案不再正确。开发者指南现在指出:
“如果您想使用“localhost”进行开发,则必须将其添加到域列表中。”
这仅在您使用127.0.0.1/... 而不是localhost/... 访问本地主机时有效。
原始答案保留在下面。
根据the reCAPTCHA Developer's Guide:
“默认情况下不再支持 localhost 域。如果您希望继续支持它们进行开发,您可以将它们添加到站点密钥的支持域列表中。转到管理控制台以更新您的支持域列表。我们建议使用单独的密钥进行开发和生产,并且不允许在您的生产站点密钥上使用 localhost。”
换句话说,只需使用相同的键。
【讨论】:
这对我有用:
使用以下测试密钥,您将始终获得 No CAPTCHA 和所有 验证请求将通过。
网站密钥:
6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI密钥:
6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWereCAPTCHA 小部件将显示一条警告消息,声称它是 仅用于测试目的。请不要将这些密钥用于您的 生产流量。
【讨论】:
6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 和6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe。
请注意,截至 2016 年,reCAPTCHA doesn't naively support localhost anymore。来自常见问题解答:
默认情况下不再支持本地主机域。如果你想 继续支持他们的发展,您可以将他们添加到列表中 您的站点密钥支持的域数。转到管理控制台 更新您支持的域列表。我们建议使用单独的密钥 用于开发和生产,并且不允许 localhost 在您的 生产站点密钥。
只需将localhost 添加到您网站的域列表中即可。
【讨论】:
localhost,但仍然出现错误“Localhost 不是此站点密钥支持的域列表。”
很简单:
localhost 和127.0.0.1 添加到新网站的域中,如下图所示。更新:
如果您的问题是如何在 Google 网站上设置 reCAPTCHA 以便在 localhost 中使用它,那么就像我在上面写的那样,但是如果您很好奇如何在 both 上使用 reCAPTCHA localhost 和 website 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 文件中添加localhost 和website 的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。所有这些都将在运行时自动填充适当的值,具体取决于您是在本地主机还是网站上运行项目。
【讨论】:
当您在 Google reCAPTCHA 中添加 域 时:
添加新域:
本地主机,而不是本地主机
“L”是大写字母。
【讨论】:
Localhost或localhost也是一样的。至少,在 reCaptcha v3 中。
自 2021 年 1 月 2 日起,Google 将这两个密钥发布在 this article 中进行测试。
我想使用 reCAPTCHA 运行自动化测试。我该怎么办? 对于 reCAPTCHA v3,为测试环境创建一个单独的密钥。分数可能不准确,因为 reCAPTCHA v3 依赖于查看真实流量。
对于 reCAPTCHA v2,请使用以下测试密钥。您将永远不会收到验证码,并且所有验证请求都会通过。
Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
reCAPTCHA 小部件将显示一条警告消息,以确保它不是 用于生产流量。
在我第一次使用密钥时,生成的电子邮件进入了垃圾邮件。
【讨论】:
删除当前的 reCAPTCHA 密钥,注册新密钥,并使用以下域设置您的 密钥设置:
127.0.0.1
localhost
【讨论】:
Google 最近已停止默认允许使用 localhost(正如 @Artur Cesar De Melo 所触及的那样)。这是他们的常见问题解答:
我收到错误消息“本地主机不在支持的域列表中”。以前可以,请问怎么办?
默认情况下不再支持 localhost 域。如果您希望继续支持它们进行开发,您可以将它们添加到您的站点密钥的支持域列表中。转到管理控制台以更新您支持的域列表。我们建议使用单独的密钥进行开发和生产,并且不允许在您的生产站点密钥上使用 localhost。
1:为您的开发环境创建一个单独的密钥
2:将 127.0.0.1 添加到允许的域列表中
3:保存更改并等待最多 30 分钟让更改生效
【讨论】:
根据Google's reCAPTCHA documentation
默认情况下不再支持 localhost 域。如果你想 继续支持他们的发展,您可以将他们添加到列表中 您的站点密钥支持的域数。转到管理控制台 更新您支持的域列表。我们建议使用单独的密钥 用于开发和生产,并且不允许 localhost 在您的 生产站点密钥
【讨论】:
reCAPTCHA 不适用于 localhost/。
使用127.0.0.1/ 而不是localhost/。
【讨论】:
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.
添加 JavaScript 插件
添加由 Google 提供的类和您的站点密钥
【讨论】:
localhost 现在可以工作了。但是,请记住,将 localhost 添加到域名列表后,最多需要 30 分钟才能生效(根据针对域名列表显示的帮助提示)。
【讨论】:
在您的 Google reCAPTCHA 网站 (https://www.google.com/recaptcha/admin/site/{siteid}/settings) 的域列表中,添加 LOCALHOST。
如果上述方法不起作用,请尝试添加127.0.0.1。
【讨论】:
如果您有旧密钥,则应重新创建 API 密钥。还要注意代理。
【讨论】:
你可以写“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
【讨论】:
我最近正在创建一个涉及 reCAPTCHA v2 的网站,我需要在我的本地主机上进行测试自动化。我没有在 reCAPTCHA 管理门户中添加任何 IP 地址或 localhost。
按照以下步骤进行
登录到 reCAPTCHA 管理站点。 Screenshot
找到按键设置
点击高级设置
在域名验证下,取消选中验证 reCAPTCHA 解决方案的来源复选框。此选项用于验证来自上述域之一的请求。
请注意,如果禁用,您需要在验证解决方案时检查服务器上的主机名。
我创建了一个新密钥,禁用了它,并使用这个密钥在 localhost 中进行测试。
这是a sample page,它为 cmets 实现了 reCAPTCHA。
【讨论】:
截至 2021 年的今天,Google reCAPTCHA Enterprise 版控制台包含一项验证检查,不允许允许将 localhost 添加到允许的域列表中。为了解决这个问题(显然仅用于开发/测试目的)为我做以下工作:
在您的hosts file 中创建一个条目,将您的域解析为您的本地主机
127.0.0.1 whatever-your-domain-will-be.com
不是通过导航到 localhost,而是通过导航到您的域来测试您的应用程序。
我的本地服务器/应用程序通常会在 http://localhost:4000 上运行,因此导航到 http://whatever-your-domain-will-be.com:4000 就可以了。
部署或测试完成后,很容易删除 hosts 文件条目,并且在 reCAPTCHA 允许的域列表中没有残留的垃圾。
【讨论】:
这可能有助于所有在本地主机上遇到 reCAPTCHA 问题的用户。谷歌确实说“默认情况下,所有密钥都在 'localhost'(或 '127.0.0.1')上工作”,但实际上在 localhost 上使用 reCAPTCHA 可能会导致问题。就我而言,我使用secure tokens 解决了它。
【讨论】:
出于测试目的,如果您想在 localhost 上测试包含 reCAPTCHA 的网页,请在域列表中添加 localhost 的 Admin Console@ 987654323@:https://www.google.com/recaptcha/admin。 *建议为 localhost 创建一个单独的站点密钥。
【讨论】:
对我有用的方法是使用我的外部 IP 地址。
如果你不知道它是什么,只需谷歌“我的 IP 是什么”
然后使用您的 IP 地址并在您的域中为验证码设置它,它应该开始正常工作。
【讨论】:
如果你使用的是 Laravel,那么你应该重启你的服务器 并运行以下两个命令:
php artisan config:clear
php artisan cache:clear
【讨论】:
【讨论】:
我在Laravel 网站上收到与 reCAPTCHA 相关的错误。我通过使用一些命令和一个 env 文件解决了这个问题,以前的答案也将有助于解决这个问题。
首先,检查 Google reCAPTCHA 密钥的 env 文件(在您的情况下是具有 Google reCAPTCHA 密钥的文件)。
其次,运行这些命令:
php artisan config:clearphp artisan cache:clearcomposer dump-autoloadphp artisan view:clearphp artisan route:clear它会解决你的问题。
【讨论】: