2012-03-16 22 views
8

Czy ktoś może wyjaśnić, jak mieć funkcję reCaptcha jak stackoverflow w mojej aplikacji MVC3.Jak zaimplementować Google reCaptcha w aplikacji MVC3?

Jak można to zmienić?

+0

Odśwież? http://www.google.com/recaptcha – LukeH

+0

Polecam używanie Rejestrującego Honeypot. Doświadczenie dla użytkowników jest DUŻO lepsze. Jest jeden pierwszy ASP.NET MVC tutaj http://nuget.org/packages/SimpleHoneypot.MVC – Paul

+0

@Paul, Czy masz przykład jak zaimplementować honeypot? – updev

Odpowiedz

30

Używam Google ReCaptcha i działa bardzo dobrze i jest bardzo prosty w implementacji.

Zauważ, że jeśli używasz Https mieć pewność, masz aktualną wersję 1.0.5.0 dll (w tym momencie)

Musisz utworzyć konto w serwisie Google Odśwież, a otrzymasz zestaw kluczy publicznych i prywatnych. Dodaj klucze do swojej strony internetowej projektu głównego pliku 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> 

Teraz użyj Nuget i zainstalować wtyczkę reCAPTCHA NET

Następnie przejdź do pliku web.config wewnątrz folderu widoki. Dodaj tę linię:

<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> 

Następnie w widoku, który chcesz pokazać captcha, dodać za pomocą komunikatu na górze pliku

@using Recaptcha; 

następnie dodać do tego widoku:

<div class="editor-label"> 
    Are you a human? 
</div> 
<div class="editor-field"> 
    @Html.Raw(Html.GenerateCaptcha("captcha", "clean")) 
    @Html.ValidationMessage("captcha") 
</div> 

W swoim działaniu regulatora trzeba będzie zmodyfikować podpis do uznania wyników captcha:

[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); 
} 

Po tych krokach mogłem wdrożyć captcha na kilku stronach i działa sprawnie. Należy pamiętać, że nazwy parametrów na działanie regulatora musi być nazwany POPRAWNIE:

bool captchaValid, string captchaErrorMessage 

Jeśli zmieniono nazwy tych parametrów otrzymasz błąd w czasie wykonywania, gdy Twoje posty formularz z powrotem do działania kontrolera.

+0

Jaka jest wartość klucza publicznego/prywatnego? Co powinienem tam umieścić? – updev

+0

@updev - otrzymujesz to, rejestrując się na stronie Google ReCaptcha: http://www.google.com/recaptcha/ –

+0

@ cd-smith: Mam dziwne zachowanie, gdy postępujesz zgodnie ze wskazówkami, aby dodać Recaptcha do MVC4 projekt ; akcja kontrolera zostanie wywołana dwa razy, gdy prześlę formularz, najpierw z poprawnymi wynikami Recaptcha, a następnie po raz drugi z wynikiem błędu! Czy miałeś do czynienia z czymś podobnym? – ThomasWeiss

3

Polecam używanie Honeypot Captcha. Doświadczenie dla użytkowników jest DUŻO lepsze. Jest jeden dziobowy ASP.NET MVC tutaj http://nuget.org/packages/SimpleHoneypot.MVC

PM> Install-Package SimpleHoneypot.MVC4 

Jest WiKi w jaki sposób dostać się tutaj: https://github.com/webadvanced/Honeypot-MVC/wiki Wystarczy rozpocząć się z sekcji Getting Started.

można przeczytać więcej na temat ogólnej idei Honeypot Captcha tutaj: http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

Powiązane problemy