2012-03-16 11 views
8

¿Alguien puede explicar cómo tener la funcionalidad ReCaptcha como stackoverflow en mi aplicación MVC3?¿Cómo implementar Google reCaptcha en una aplicación MVC3?

¿Y cómo se puede personalizar eso?

+0

Reconocer texto? http://www.google.com/recaptcha – LukeH

+0

Recomendaría utilizar un Honeypot ReCaptcha. La experiencia para sus usuarios es MUCHO mejor. Hay una versión anterior de ASP.NET MVC aquí http://nuget.org/packages/SimpleHoneypot.MVC – Paul

+0

@Paul, ¿Tiene algún ejemplo de cómo implementar honeypot? – updev

Respuesta

30

Utilizo Google ReCaptcha y funciona muy bien y es muy simple de implementar.

Tenga en cuenta que si está utilizando HTTPS asegurarse de que tiene la versión actual de la DLL (1.0.5.0 en este momento)

Es necesario crear una cuenta en el sitio de Google Reconocer y obtener un conjunto de claves públicas y privadas. Añadir las llaves de su proyecto de archivo web.config web principal:

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

Ahora usa NuGet e instalar el plugin reCAPTCHA para .NET

A continuación, vaya a su archivo web.config en el interior de la carpeta de vistas. Añadir esta línea:

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

Luego, en su opinión de que desea mostrar el código de imagen, añadir la instrucción using en la parte superior de su archivo

@using Recaptcha; 

continuación, añadir esto a la vista:

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

En su acción de controlador tendrá que modificar la firma para aceptar los resultados de la imagen:

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

Siguiendo esos pasos me ha permitido implementar captcha en varias páginas y funciona sin problemas. Tenga en cuenta que los nombres de los parámetros de la acción del controlador debe ser nombrado CORRECTAMENTE:

bool captchaValid, string captchaErrorMessage 

Si ha cambiado estos nombres de parámetros que se producirá un error en tiempo de ejecución cuando su formulario vuelve de nuevo a la acción del controlador.

+0

¿Cuál es el valor de la clave pública/privada? ¿Qué debería poner allí? – updev

+0

@updev - obtienes eso registrándote en la página ReCaptcha de Google: http://www.google.com/recaptcha/ –

+0

@ cd-smith: Obtuve un comportamiento extraño al seguir tus indicaciones para agregar Recaptcha a MVC4 proyecto; la acción del controlador se llama dos veces cuando envío el formulario, primero con los resultados Recaptcha correctos, y luego una segunda vez con resultados de error. ¿Te enfrentaste a algo similar? – ThomasWeiss

3

Recomendaría usar un Captcha de Honeypot. La experiencia para sus usuarios es MUCHO mejor. Hay una a proa ASP.NET MVC aquí http://nuget.org/packages/SimpleHoneypot.MVC

PM> Install-Package SimpleHoneypot.MVC4 

Hay un wiki sobre cómo llegar hasta aquí: https://github.com/webadvanced/Honeypot-MVC/wiki acaba de empezar a salir con la sección Getting Started.

Puede leer más acerca de la idea general de un Honeypot Captcha aquí: http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

Cuestiones relacionadas