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?
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?
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.
Qual è il valore della chiave pubblica/privata? Cosa dovrei mettere lì? – updev
@updev - lo ottieni iscrivendoli alla pagina ReCaptcha di Google: http://www.google.com/recaptcha/ –
@ 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
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
Recaptcha? http://www.google.com/recaptcha – LukeH
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
@Paul, hai un esempio di come implementare honeypot? – updev