2010-03-31 3 views
1

내가 여기에서 찾을 수있는 .NET 1.1 프로젝트에 reCAPTCHA를 검사기의 이전 버전을 사용하려고에서 : http://recaptcha.googlecode.com/svn/trunk/recaptcha-plugins/dotnet-old/src/Recaptcha/reCAPTCHA를 검사기 .NET 1.1 프로젝트

내가 가진 코드는 예와 매우 유사합니다

<asp:TextBox ID="EmailAddress" runat="server"></asp:TextBox> 
<recatpcha:RecaptchaValidator ID="RecaptchaValidator1" runat="server" Theme="Clean" PublicKey="xxxxxxxxxxxxxx" PrivateKey="xxxxxxxxxx" ControlToValidate="EmailAddress"></recatpcha:RecaptchaValidator> 
<asp:Button ID="Button1" runat="server" Text="Button" CausesValidation="true" OnClick="Button1_Click" /> 

싶습니다 동작은 간단하다 : 그은 위의 링크에서 확인하실 수 있습니다 페이지로드, 사용자가 자신의 이메일 주소를 입력하는 필드가 표시되어, 보안 문자를 완료하고 버튼을 제출 . 제출시 해당 이메일 주소로 데이터베이스에 사용자가 없거나 보안 문자 입력이 잘못되면 새 보안 문자가 적절한 오류 메시지와 함께 표시됩니다. 그렇지 않으면 비밀번호를 재설정하는 방법에 대한 이메일을 받게됩니다.

주요 문제는 captcha가 페이지로드에 표시되지 않는다는 것입니다. 그러나 제출 버튼을 눌렀을 때 Page.Validate()가 실행되면 페이지가 다시로드되고 보안 문자가 표시됩니다.

이것을 바탕으로 다른 접근 방식을 시도하고 페이지로드 이벤트에서 Page.Validate()를 호출하여 초기에 captcha를 표시하도록했습니다. 이것은 거의 효과가있었습니다 : captcha가 첫 번째 페이지로드에 표시되었지만 올바른 captcha 응답과 함께 잘못된 이메일이 제출되면 페이지가 다시로드 될 때 captcha가 사라지지만 물론 이메일을 보낼 수 없습니다.

페이지가 처음에 표시 될 때 captcha가 렌더링되도록하거나, 유효하지 않은 이메일 주소가 입력되었을 때 captcha가 제출되지 않도록하려면 어떻게해야합니까?

답변

1

글쎄, 꽤 아니지만, 나는 그것을 작동 시켰어.

내가 그것을가 원하는 방식으로 작동하지 않았다 RecaptchaValidator 태그를 사용하기 때문에, 나는 thusly 히 페이지의 위젯을 포함하는 reCAPTCHA를 AJAX의 API (http://recaptcha.net/apidocs/captcha/client.html를) 사용 : 이후,

$(document).ready(function() { 
    Recaptcha.create("<public key>", 
     "ReCaptcha", { 
     theme: "clean", 
     callback: Recaptcha.focus_response_field 
    }); 
}); 

그런 다음 모든 recaptcha 서버 (challenge, publickey 등 자세한 정보는 여기 http://recaptcha.net/apidocs/captcha/)와 함께 유효성을 검사해야합니다. 새 RecaptchaValidator를 인스턴스화하고 나머지 속성을 설정하고 메서드를 호출하여 사용자 응답의 유효성을 검사합니다.

protected void Submit_Click(object sender, System.EventArgs e) 
{ 
    RecaptchaValidator RecaptchaValidator1 = new RecaptchaValidator(); 
    RecaptchaValidator1.Page = this; 
    RecaptchaValidator1.PrivateKey = "<private key>"; 
    RecaptchaValidator1.PublicKey = "<public key>"; 

    bool CaptchaPassed = RecaptchaValidator1.ValidateUserResponse(); 

    if (CaptchaPassed) 
    {  
     //hide the captcha, do some stuff 
    }  
} 

틀림없이 조금 해킹되었지만 작업이 완료되었습니다.

참고 -이 질문에 언급했지만 반복하기 만하면됩니다.이 경우 서버 측 코드는 이전의 .NET 1.1 호환 recaptcha 플러그인을 사용합니다. 플러그인의 코드에 대한 링크가 문제가됩니다. 당황 스럽지만 낮은 담당자가있어서 더 이상 하이퍼 링크를 사용할 수 없습니다. <