2012-03-16 16 views
8

Qualcuno può spiegare come avere funzionalità di reCaptcha come StackOverflow nella mia applicazione MVC3.Come implementare Google reCaptcha in un'applicazione MVC3?

E come si può personalizzare?

+0

Recaptcha? http://www.google.com/recaptcha – LukeH

+0

Consiglierei di utilizzare Honeypot ReCaptcha. L'esperienza per i tuoi utenti è MOLTO meglio. C'è una versione preliminare di ASP.NET MVC qui http://nuget.org/packages/SimpleHoneypot.MVC – Paul

+0

@Paul, hai un esempio di come implementare honeypot? – updev

risposta

30

Io uso Google ReCaptcha e funziona molto bene ed è molto semplice da implementare.

Si noti che se si utilizza HTTPS essere sicuri di avere la versione corrente del dll (1.0.5.0 in questo momento)

È necessario creare un account sul sito di Google Recaptcha e ottenere un set di chiavi pubbliche e private. Aggiungere le chiavi al progetto file web.config principale web:

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

Ora usare NuGet e installare il plugin reCAPTCHA per NET

Poi, vai al file web.config all'interno della cartella VISTA. Aggiungere questa riga:

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

Quindi, a suo avviso che si desidera mostrare il captcha, aggiungere l'istruzione using nella parte superiore del file

@using Recaptcha; 

quindi aggiungere questo alla tua vista:

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

Nella vostra azione di controllo è necessario modificare la firma ad accettare i risultati 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); 
} 

Seguire questi passaggi mi ha permesso di implementare captcha su diverse pagine e funziona senza intoppi. Si noti che i nomi dei parametri sulla azione di controllo deve essere denominato CORRETTAMENTE:

bool captchaValid, string captchaErrorMessage 

Se è stato modificato questi nomi di parametro si otterrà un errore in fase di esecuzione, quando i tuoi messaggi forma torna l'azione di controllo.

+0

Qual è il valore della chiave pubblica/privata? Cosa dovrei mettere lì? – updev

+0

@updev - lo ottieni iscrivendoli alla pagina ReCaptcha di Google: http://www.google.com/recaptcha/ –

+0

@ cd-smith: ho seguito uno strano comportamento seguendo le tue linee guida per aggiungere Recaptcha a un MVC4 progetto; l'azione del controller viene chiamata due volte quando invio il modulo, prima con i risultati Recaptcha corretti, e quindi una seconda volta con i risultati dell'errore! Hai affrontato qualcosa di simile? – ThomasWeiss

3

Suggerirei di utilizzare un Captcha Honeypot. L'esperienza per i tuoi utenti è MOLTO meglio. C'è una ribalta ASP.NET MVC qui http://nuget.org/packages/SimpleHoneypot.MVC

PM> Install-Package SimpleHoneypot.MVC4 

C'è un wiki su come ottenerlo qui: https://github.com/webadvanced/Honeypot-MVC/wiki basta iniziare con la sezione Getting Started.

Si può leggere di più l'idea generale di un Honeypot Captcha qui: http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

Problemi correlati