我正在使用PHP开发一个网站,我想在其中一个会话中进行人工验证。对于开发,我最初在本地运行系统,当它准备好时,我将把它放在某个域中。
在reCAPTCHA网站上说插件只能在给定的域(和子域)上工作。
有没有办法在本地主机上使用reCAPTCHA插件?
我正在使用PHP开发一个网站,我想在其中一个会话中进行人工验证。对于开发,我最初在本地运行系统,当它准备好时,我将把它放在某个域中。
在reCAPTCHA网站上说插件只能在给定的域(和子域)上工作。
有没有办法在本地主机上使用reCAPTCHA插件?
更新
原来的答案不再正确了。开发者指南现在声明:
"如果您想使用"localhost"进行开发,必须将其添加到域列表中。"
这将只在您使用127.0.0.1/…访问localhost时有效。而不是localhost/....
原答案保存在下面。
根据reCAPTCHA开发者指南:
默认情况下不再支持localhost域。如果您希望继续支持它们进行开发,您可以将它们添加到站点密钥支持的域列表中。转到管理控制台更新受支持的域列表。我们建议在开发和生产中使用单独的密钥,并且不允许在生产站点中使用localhost密钥。”
换句话说,就是使用相同的键。
这可以帮助所有在本地主机上使用reCAPTCHA时遇到问题的用户。谷歌确实说“默认情况下,所有密钥都在'localhost'(或'127.0.0.1')上工作”,但实际上在localhost上使用reCAPTCHA可能会导致问题。在我的例子中,我使用安全令牌解决了这个问题。
我在这里发布了一个PHP的工作解决方案。
请注意,从2016年起,reCAPTCHA不再支持本地主机。常见问题解答:
默认情况下不再支持本地主机域。如果你愿意 继续支持他们的发展,你可以将他们添加到列表中 您的站点密钥支持的域。转到管理控制台 更新受支持的域列表。我们建议使用单独的钥匙 用于开发和生产,并且不允许在您的 生产站点密钥。
只需将localhost添加到您的站点域名列表中,就可以了。
根据谷歌的reCAPTCHA文档
默认情况下不再支持本地主机域。如果你愿意 继续支持他们的发展,你可以将他们添加到列表中 您的站点密钥支持的域。转到管理控制台 更新受支持的域列表。我们建议使用单独的钥匙 用于开发和生产,并且不允许在您的 生产现场密钥
谷歌最近停止默认允许本地主机(正如@Artur Cesar De Melo提到的那样)。这是他们的常见问题:
我得到一个错误“Localhost不在支持的域列表中”。这个之前还能用,我该怎么办? 默认情况下不再支持本地主机域。如果您希望继续支持它们进行开发,您可以将它们添加到站点密钥支持的域列表中。转到管理控制台更新受支持的域列表。我们建议为开发和生产使用单独的密钥,并且不允许在您的生产站点密钥上使用localhost。
1:为您的开发环境创建一个单独的键
2:将“127.0.0.1”添加到允许创建的域列表中
3:保存更改并允许最多30分钟的更改生效
很简单:
转到谷歌reCAPTCHA管理面板 将localhost & 127.0.0.1添加到新站点的域,如下图所示。
更新:
如果你的问题是如何在谷歌网站上设置reCAPTCHA,以便在localhost中使用它,那么它就像我上面写的那样,但如果你好奇如何在localhost和网站主机上使用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
}
In View:(参考)
@ReCaptcha.GetHtml(@ViewBag.publicKey)
@if (ViewBag.RecaptchaLastErrors != null)
{
<div>Oops! Invalid reCAPTCHA =(</div>
}
使用它
A)在您的Web项目中添加以下ActionFilter:
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>
注意:通过这种方式,您不需要在post操作中设置reCaptcha_SecretKey参数,也不需要在您的操作和视图中手动设置任何用于reCaptcha的ViewBag。所有这些都将在运行时自动填充,并根据您是在本地主机上还是在网站上运行项目而具有适当的值。
这招对我很管用:
摘自reCAPTCHA文档:
使用以下测试键,您将始终得到No CAPTCHA和所有 验证请求将通过。 网址:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 密钥:6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe reCAPTCHA小部件将显示一条警告消息,声称它是 仅作测试用途。请不要用这些钥匙 生产流量。
你可以写“localhost”或“127.0.0.1”,但URL必须相同。
例如:谷歌domain Add -> localhost URL => localhost/login.php
例如:谷歌域Add -> 127.0.0.1 URL => 127.0.0.1/login.php
我最近正在创建一个涉及reCAPTCHA v2的网站,我需要在我的本地主机上进行自动化测试。我没有向reCAPTCHA管理门户添加任何IP地址或本地主机。
遵循以下步骤
登录到reCAPTCHA管理站点。截图 定位关键设置 点击高级设置 在“域名验证”下,取消选中“验证reCAPTCHA解决方案的来源”复选框。此选项用于验证来自上述列出的域之一的请求。 请注意,如果禁用,则在验证解决方案时需要检查服务器上的主机名。
我创建了一个新密钥,禁用了它,并使用这个密钥在localhost中进行测试。
这是一个示例页面,它为注释实现了reCAPTCHA。
我在Laravel网站上得到了一个与reCAPTCHA相关的错误。我通过使用一些命令和一个env文件解决了这个问题,以前的答案也将有助于解决这个问题。
首先,检查env文件(在您的示例中,该文件具有谷歌reCAPTCHA密钥)中的谷歌reCAPTCHA密钥。
其次,运行这些命令:
PHP工匠配置:清除 PHP工匠缓存:清除 作曲家dump-autoload PHP工匠视图:清除 PHP工匠路线:清除
它会解决你的问题。
出于测试目的,如果您想在localhost上测试包含reCAPTCHA的web页面,则通过管理控制台2:https://www.google.com/recaptcha/admin将localhost添加到域列表中。*建议为localhost创建一个单独的站点密钥。
管理控制台截图
验证码输出
如果你正在使用Laravel,那么你应该重新启动你的服务器 执行如下两条命令:
php artisan config:clear
php artisan cache:clear
截至2021年1月2日,谷歌在本文中发布了这两个密钥进行测试。
我想用reCAPTCHA运行自动测试。我该怎么办? 对于reCAPTCHA v3,为测试环境创建一个单独的密钥。分数可能不准确,因为reCAPTCHA v3依赖于看到真实的流量。
对于reCAPTCHA v2,使用以下测试键。您将始终得到No CAPTCHA和所有验证请求将通过。
Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
reCAPTCHA小部件将显示一条警告消息,以确保不存在 用于生产流量。
我第一次使用密钥时,生成的电子邮件就变成了垃圾邮件。
到您的谷歌reCAPTCHA网站域名列表(https://www.google.com/recaptcha/admin/site/{siteid}/settings),添加LOCALHOST。
如果上面的不能工作,尝试添加127.0.0.1。
截至2021年的今天,谷歌reCAPTCHA企业版控制台包括一个验证检查,不允许将localhost添加到允许的域列表中。为了解决这个问题(显然只是为了开发/测试的目的),我做了以下工作:
在hosts文件中创建一个将域解析为本地主机的条目 127.0.0.1 whatever-your-domain-will-be.com 测试应用程序不是通过导航到localhost,而是通过导航到域。
我的本地服务器/应用程序通常在http://localhost:4000上运行,所以导航到http://whatever-your-domain-will-be.com:4000就可以了。
一旦部署或测试完成,就很容易删除hosts文件条目,并且在reCAPTCHA允许的域列表中没有残留的垃圾。
最新更新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”,它工作得很好。
OR
对于reCAPTCHA v2,使用以下测试键。您将始终得到No CAPTCHA和所有验证请求将通过。
Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
参考