如何在MVC3应用程序中实现Google reCaptcha?
我使用Google ReCaptcha,它工作得很好,实施起来非常简单。
请注意,如果您使用的是HTTPS确保您有该DLL的当前版本(1.0.5.0在这个时候)
您需要创建在谷歌的Recaptcha网站的帐户,并得到一组的公钥和私钥。键添加到您的Web项目主要web.config文件:
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
<add key="ReCaptchaPrivateKey" value="put your private key value here" />
<add key="ReCaptchaPublicKey" value="put your public key value here" />
</appSettings>
现在使用的NuGet和安装的reCAPTCHA插件.NET
然后,转到您的web.config文件你的意见文件夹内。加入这一行:
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Recaptcha"/>
</namespaces>
然后,在你认为你要显示的验证码,在你的文件的顶部添加using语句
@using Recaptcha;
然后添加到您的观点:
<div class="editor-label">
Are you a human?
</div>
<div class="editor-field">
@Html.Raw(Html.GenerateCaptcha("captcha", "clean"))
@Html.ValidationMessage("captcha")
</div>
在你的控制器动作,你将需要修改签名就可以接受验证码结果:
[HttpPost]
[RecaptchaControlMvc.CaptchaValidator]
public ActionResult ForgotPassword(CheckUsernameViewModel model, bool captchaValid, string captchaErrorMessage) {
if (!Membership.EnablePasswordReset)
throw new Exception("Password reset is not allowed\r\n");
if(ModelState.IsValid) {
if(captchaValid) {
return RedirectToAction("AnswerSecurityQuestion", new { username = model.Username });
}
ModelState.AddModelError("", captchaErrorMessage);
}
return View(model);
}
以下这些步骤使我可以在多个页面上实施验证码并且工作顺利。请注意,在控制器操作的参数名称必须正确命名为:
bool captchaValid, string captchaErrorMessage
如果你改变了这些参数的名字,你会在运行时得到一个错误,当您的形式回发到控制器动作。
什么是公钥/私钥值?我应该放什么? – updev 2012-03-16 16:10:12
@updev - 你可以在Google的ReCaptcha页面上注册他们:http://www.google.com/recaptcha/ – 2013-01-03 18:24:21
@ cd-smith:当遵循您的指导原则将Recaptcha添加到MVC4时,我遇到了一个奇怪的行为项目;当我提交表单时,控制器动作会被调用两次,首先使用正确的Recaptcha结果,然后再次发生错误结果!你有类似的东西吗? – ThomasWeiss 2013-02-04 11:18:10
我会推荐使用蜜罐Captcha。您的用户的体验更好。有一个脱颖而出ASP.NET MVC这里http://nuget.org/packages/SimpleHoneypot.MVC
PM> Install-Package SimpleHoneypot.MVC4
有关于如何得到它在这里一个Wiki:https://github.com/webadvanced/Honeypot-MVC/wiki 刚开始脱离与Getting Started
部分。
你可以阅读更多关于蜜罐验证码在这里的总体思路:http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx
的Recaptcha? http://www.google.com/recaptcha – LukeH 2012-03-16 16:01:35
我会推荐使用蜜罐ReCaptcha。您的用户的体验更好。这里有一个ASP.NET MVC http://nuget.org/packages/SimpleHoneypot.MVC – Paul 2012-03-16 16:09:11
@Paul,你是否有如何实现蜜罐的例子? – updev 2012-03-16 18:37:45