Как реализовать Google reCaptcha в приложении MVC3? - PullRequest
8 голосов
/ 16 марта 2012

Может кто-нибудь объяснить, как использовать функцию reCaptcha, такую ​​как stackoverflow, в моем приложении MVC3.

И как вы можете настроить это?

Ответы [ 2 ]

30 голосов
/ 16 марта 2012

Я использую Google ReCaptcha, и он работает очень хорошо и очень прост в реализации.

Обратите внимание, что если вы используете Https, убедитесь, что у вас есть текущая версия DLL (1.0.5.0 в настоящее время)

Вам необходимо создать учетную запись на сайте Google Recaptcha и получить набор открытых и закрытых ключей. Добавьте ключи в основной файл 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 в папке VIEWS. Добавьте эту строку:

<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

Если вы изменили имена этих параметров, вы получите сообщение об ошибке во время выполнения, когда ваша форма вернется к действию контроллера.

3 голосов
/ 17 марта 2012

Я бы порекомендовал использовать капчу Honeypot.Опыт для ваших пользователей намного лучше.Здесь есть один передовой ASP.NET MVC http://nuget.org/packages/SimpleHoneypot.MVC

PM> Install-Package SimpleHoneypot.MVC4 

Здесь есть WiKi о том, как его получить: https://github.com/webadvanced/Honeypot-MVC/wiki Просто начните с раздела Getting Started.

Подробнее об общей идее капчи Honeypot вы можете прочитать здесь: http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

...