在localhost上使用reCAPTCHA
我正在开发一个使用PHP的网站,我想在其中一个会话中进行人工validation。 对于开发,我最初在本地运行系统,当它准备好时,我将把它放在一个特定的领域。
在reCAPTCHA网站上说,插件只能在给定的域(和子域)上工作。
我的问题是:有什么办法在本地主机上使用reCAPTCHA插件?
更新
原来的答案不再正确。 开发者指南现在指出:
“如果您想使用”localhost“进行开发,则必须将其添加到域列表中。”
这只有在使用127.0.0.1/...
而不是localhost/...
访问本地主机时才有效。
原来的答案保存在下面。
根据reCAPTCHA开发者指南 :
“默认情况下,所有密钥都在”本地主机“(或”127.0.0.1“)上工作,因此您可以随时在本地机器上开发和testing。
换句话说,只需使用相同的密钥。
请注意,截至2016年, ReCaptcha不再天真地支持本地主机 。 从常见问题解答:
localhost域默认不再支持。 如果您希望继续支持他们进行开发,您可以将其添加到您的站点密钥的受支持域的列表中。 转到pipe理控制台来更新您支持的域名列表。 我们build议使用单独的密钥进行开发和生产,并且不允许在生产站点上使用本地主机密钥。
所以只需将localhost
添加到您网站的域名列表中即可。
它是如此容易:
- 转到您的谷歌reCaptchapipe理面板
- 将
localhost
&127.0.0.1
添加到新网站的域中,如下图所示。
更新:
如果你的问题是如何设置reCaptcha
在谷歌网站在本地主机使用它,那么我已经写在上面,但如果你好奇,你如何可以在localhost
和website 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
文件中一样添加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_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