在localhost上使用reCAPTCHA

我正在开发一个使用PHP的网站,我想在其中一个会话中进行人工validation。 对于开发,我最初在本地运行系统,当它准备好时,我将把它放在一个特定的领域。

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

我的问题是:有什么办法在本地主机上使用reCAPTCHA插件?

更新

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

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

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

原来的答案保存在下面。


根据reCAPTCHA开发者指南 :

“默认情况下,所有密钥都在”本地主机“(或”127.0.0.1“)上工作,因此您可以随时在本地机器上开发和testing。

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

请注意,截至2016年, ReCaptcha不再天真地支持本地主机 。 从常见问题解答:

localhost域默认不再支持。 如果您希望继续支持他们进行开发,您可以将其添加到您的站点密钥的受支持域的列表中。 转到pipe理控制台来更新您支持的域名列表。 我们build议使用单独的密钥进行开发和生产,并且不允许在生产站点上使用本地主机密钥。

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

它是如此容易:

  1. 转到您的谷歌reCaptchapipe理面板
  2. localhost127.0.0.1添加到新网站的域中,如下图所示。

在这里输入图像说明


更新:

如果你的问题是如何设置reCaptcha在谷歌网站在本地主机使用它,那么我已经写在上面,但如果你好奇,你如何可以在localhostwebsite host上使用reCAPTCHA 在您的控制器最小代码,并防止一些代码像ConfigurationManager.AppSettings["ReCaptcha:SiteKey"] ,然后我帮你在这个额外的描述和代码在我的答案。

你喜欢下面的GET和POST操作吗?

它支持reCaptcha,并且不需要任何其他代码来处理reCaptcha。

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

视图中:( 参考 )

 @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文件中一样添加localhostwebsitereCaptcha设置键:

 <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_SecretKey任何ViewBag ,所有这些都将在运行时自动填充适当的值,具体取决于您在本地主机上运行项目或网站

谷歌最近改变停止允许默认允许本地主机。 (如@Artur Cesar De Melo所说)这是在他们的常见问题解答之下:

我收到一个错误“Localhost不在受支持的域名列表”。 这是以前工作,我该怎么办?

localhost域默认不再支持。 如果您希望继续支持他们进行开发,您可以将其添加到您的站点密钥的受支持域的列表中。 转到pipe理控制台来更新您支持的域名列表。 我们build议使用单独的密钥进行开发和生产,并且不允许在生产站点上使用本地主机密钥。

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

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

3:保存更改并允许最多30分钟的更改生效

这对我工作:

“使用以下testing密钥,您将始终得到”无validation码“,所有validation请求都会通过。

站点密钥:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI密钥:6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe reCAPTCHA小部件将显示一条警告消息,声明它仅用于testing目的。 请不要将这些密钥用于生产stream量。“

从这里提取: https : //developers.google.com/recaptcha/docs/faq

BR!

根据Google recaptcha文档

localhost域默认不再支持。 如果您希望继续支持他们进行开发,您可以将其添加到您的站点密钥的受支持域的列表中。 转到pipe理控制台来更新您支持的域名列表。 我们build议使用单独的密钥进行开发和生产,并且不允许在生产站点上使用本地主机密钥

如果你有旧的密钥,你应该重新创build你的API密钥。 也要注意代理。

Recaptcha将无法在localhost/

 Use `127.0.0.1/` instead of `localhost/` 

是的,这是一个较老的问题,但这可能会帮助所有在本地主机上使用reCaptcha的用户。 谷歌确实说:“默认情况下,所有的密钥在'本地主机'(或'127.0.0.1')”上工作,但真正使用本地主机上的reCaptcha可能会导致问题。 在我的情况下,我解决了我的安全令牌

我在这里发布了适用于PHP的工作解决scheme