2012-03-16 14 views
8

Bất cứ ai có thể giải thích làm thế nào để có chức năng reCaptcha như stackoverflow trong ứng dụng MVC3 của tôi.Cách triển khai Google reCaptcha trong ứng dụng MVC3?

Và cách bạn có thể tùy chỉnh?

+0

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

+0

Tôi khuyên bạn nên sử dụng Honeypot ReCaptcha. Trải nghiệm cho người dùng của bạn tốt hơn. Có một cái tên là ASP.NET MVC ở đây http://nuget.org/packages/SimpleHoneypot.MVC – Paul

+0

@Paul, Bạn có ví dụ về cách thực hiện honeypot? – updev

Trả lời

30

Tôi sử dụng Google ReCaptcha và nó hoạt động rất tốt và rất đơn giản để triển khai.

Lưu ý rằng nếu bạn đang sử dụng Https hãy chắc chắn bạn có phiên bản hiện tại của dll (1.0.5.0 vào thời điểm này)

Bạn cần phải tạo một tài khoản trên trang web Google xác thực lại và có được một tập các khóa công khai và riêng tư. Thêm những chìa khóa để dự án web file web.config chính của bạn:

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

Bây giờ sử dụng NuGet và cài đặt plugin reCAPTCHA cho .NET

Sau đó, đi đến file web.config của bạn bên trong thư mục VIEWS của bạn. Thêm dòng này:

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

Sau đó, theo quan điểm của bạn mà bạn muốn hiển thị hình ảnh xác thực, thêm báo cáo kết quả sử dụng ở phía trên cùng của tập tin của bạn

@using Recaptcha; 

sau đó thêm này để xem bạn:

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

Trong hành động điều khiển của bạn, bạn sẽ cần phải sửa đổi chữ ký để chấp nhận các kết quả hình ảnh xác thực:

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

Làm theo các bước đó đã cho phép tôi triển khai hình ảnh xác thực trên một số trang và hoạt động trơn tru. Lưu ý rằng các tên tham số trên hành động điều khiển phải có tên ĐÚNG:

bool captchaValid, string captchaErrorMessage 

Nếu bạn đã thay đổi các tên tham số bạn SẼ nhận được một lỗi khi chạy khi hình thức bài viết của bạn trở lại với hành động điều khiển.

+0

Giá trị khóa công khai/riêng tư là gì? Tôi nên đặt gì ở đó? – updev

+0

@updev - bạn nhận được điều đó bằng cách đăng ký cho họ trên trang ReCaptcha của Google: http://www.google.com/recaptcha/ –

+0

@ cd-smith: Tôi có một hành vi lạ khi làm theo hướng dẫn của bạn để thêm Recaptcha vào MVC4 dự án ; hành động điều khiển được gọi hai lần khi tôi gửi biểu mẫu, trước tiên với kết quả Recaptcha chính xác và sau đó là lần thứ hai với kết quả lỗi! Bạn có phải đối mặt với bất cứ điều gì tương tự? – ThomasWeiss

3

Tôi khuyên bạn nên sử dụng Honeypot Captcha. Trải nghiệm cho người dùng của bạn tốt hơn. Có một fore ASP.NET MVC đây http://nuget.org/packages/SimpleHoneypot.MVC

PM> Install-Package SimpleHoneypot.MVC4 

Có một WiKi về cách để có được nó lên đây: https://github.com/webadvanced/Honeypot-MVC/wiki Chỉ cần bắt đầu với phần Getting Started.

Bạn có thể đọc thêm về ý tưởng chung của một hình ảnh xác thực Honeypot tại đây: http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx