如何在MVC3应用程序中实现Google reCaptcha?

时间:2012-03-16 15:47:23

标签: asp.net asp.net-mvc asp.net-mvc-3 c#-4.0 recaptcha

任何人都可以解释如何在我的MVC3应用程序中使用像stackoverflow这样的reCaptcha功能。

你如何定制?

2 个答案:

答案 0 :(得分:30)

我使用Google ReCaptcha,效果非常好,并且实施起来非常简单。

请注意,如果您使用的是Https,请确保您拥有当前版本的dll(此时为1.0.5.0)

您需要在Google 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并安装.NET的reCAPTCHA插件

然后,转到VIEWS文件夹中的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

如果您更改了这些参数名称,那么当您的表单回发到控制器操作时,您将在运行时收到错误。

答案 1 :(得分:3)

我建议使用Honeypot Captcha。为您的用户提供的体验更好。这里有一个前MV 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