Валидатор рекапчи в .NET 1.1 проекте - PullRequest
1 голос
/ 01 апреля 2010

Я пытаюсь использовать старую версию Recaptcha Validator для проекта .net 1.1, которую можно найти здесь: http://recaptcha.googlecode.com/svn/trunk/recaptcha-plugins/dotnet-old/src/Recaptcha/

Код, который я имею, очень похож на пример, который можно найти по ссылке выше:

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

Мне нужно простое поведение: при загрузке страницы пользователю предоставляется поле для ввода адреса электронной почты, контрольный код для завершения и кнопка отправки. При отправке, если в нашей базе данных не найден пользователь с таким адресом электронной почты или введен неправильный ответ на код проверки, отображается новый код проверки с соответствующим сообщением об ошибке. В противном случае они получат электронное письмо о том, как сбросить пароль.

Основная проблема заключается в том, что капча не отображается при загрузке страницы. Однако когда я нажимаю кнопку отправки, вызывая Page.Validate (), страница перезагружается и отображается капча.

Исходя из этого, я решил, что попробую другой подход и вызову Page.Validate () в событии загрузки страницы, чтобы капча отображалась изначально. Это почти сработало: капча показалась при первой загрузке страницы, но когда отправлено недействительное письмо вместе с правильным ответом капчи, капча пропадает при перезагрузке страницы, но, конечно, письмо не может быть отправлено.

Как я могу принудительно заставить капчу отображаться при первом обращении к странице, или предотвратить отправку капчи при вводе неверного адреса электронной почты?

1 Ответ

1 голос
/ 07 апреля 2010

Ну, это не красиво, но у меня все получилось.

Поскольку использование тега RecaptchaValidator не сработало так, как я хотел, я использовал API AJAX recaptcha (http://recaptcha.net/apidocs/captcha/client.html), чтобы таким образом встроить виджет на страницу:

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

Затем, так как все данные должны проверяться на серверах рекапчи (вызов, публичный ключ и т. Д. Дополнительная информация здесь: http://recaptcha.net/apidocs/captcha/) в POST, я создал новый 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
    }       
}

По общему признанию немного хакерский, но это сделало работу.

ПРИМЕЧАНИЕ. - Я упоминал об этом в этом вопросе, но только для того, чтобы повторить: для этого на стороне сервера используется старый подключаемый модуль recaptcha, совместимый с .NET 1.1. Ссылка на код для плагина находится в вопросе. У меня неловко низкая репутация, и я больше не могу использовать гиперссылки>. <</p>

...