我正在使用PHP开发一个网站,我想在其中一个会话中进行人工验证。对于开发,我最初在本地运行系统,当它准备好时,我将把它放在某个域中。
在reCAPTCHA网站上说插件只能在给定的域(和子域)上工作。
有没有办法在本地主机上使用reCAPTCHA插件?
我正在使用PHP开发一个网站,我想在其中一个会话中进行人工验证。对于开发,我最初在本地运行系统,当它准备好时,我将把它放在某个域中。
在reCAPTCHA网站上说插件只能在给定的域(和子域)上工作。
有没有办法在本地主机上使用reCAPTCHA插件?
当前回答
删除当前的reCAPTCHA密钥,注册新的密钥,并使用这些域设置您的密钥设置:
127.0.0.1
localhost
其他回答
更新
原来的答案不再正确了。开发者指南现在声明:
"如果您想使用"localhost"进行开发,必须将其添加到域列表中。"
这将只在您使用127.0.0.1/…访问localhost时有效。而不是localhost/....
原答案保存在下面。
根据reCAPTCHA开发者指南:
默认情况下不再支持localhost域。如果您希望继续支持它们进行开发,您可以将它们添加到站点密钥支持的域列表中。转到管理控制台更新受支持的域列表。我们建议在开发和生产中使用单独的密钥,并且不允许在生产站点中使用localhost密钥。”
换句话说,就是使用相同的键。
如果你正在使用Laravel,那么你应该重新启动你的服务器 执行如下两条命令:
php artisan config:clear
php artisan cache:clear
reCAPTCHA在localhost/上无效。
使用127.0.0.1/代替localhost/。
很简单:
转到谷歌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。所有这些都将在运行时自动填充,并根据您是在本地主机上还是在网站上运行项目而具有适当的值。
迅速的回答
Do get requests on Recaptcha in your backend rather than frontend