Recaptcha вызывается из управления главной страницы - PullRequest
5 голосов
/ 18 мая 2010

У меня есть главная страница, которая содержит элемент управления Login, так что пользователь может входить / выходить с любой страницы. Однако для пары страниц содержимого требуется элемент управления Recaptcha. Это вызывает проблемы, потому что, когда я пытаюсь войти на страницу, которая имеет элемент управления Recaptcha, система ожидает от меня ввода слов. Мне известно об отсутствии групп проверки в элементе управления Recaptcha и о том, что на странице ASP.NET не может быть нескольких форм. Есть ли способ обойти это? «Хакерский» способ, о котором я могу думать, заключается в событии «Вход», проверьте страницу для элемента управления Recaptcha. Если он существует, отключите его, в противном случае продолжите. Тем не менее, это кажется довольно неэффективным, особенно когда страниц довольно много, и большинство из них не имеют элемента управления Recaptcha.

Ответы [ 4 ]

3 голосов
/ 25 мая 2010

Обходной путь для этой проблемы заключается в следующем:

  1. Установите ValidationGroup на кнопку входа в систему. Элемент управления reCAPTCHA не будет проверен, если нажата кнопка с группой ValidationGroup, для которой задано непустое значение.
  2. На страницах, требующих проверки reCAPTCHA, оставьте значение кнопки ValidationGroup не пустым (в противном случае поля входа также будут проверены), но вызовите RecaptchaControl.Validate () вручную в подпрограмме.

Тема обсуждения в официальном списке рассылки reCAPTCHA для разработчиков .

0 голосов
/ 10 декабря 2010

Я был точно в том же положении с контролем входа в систему на моей главной странице, и настройка SkipRecaptcha=true; не работала для меня. Страница по-прежнему не прошла проверку, и мое событие LoggingIn не было запущено на главной странице.

Я видел бесчисленные обходные пути, включая обновление редко поддерживаемой Recapta, но я решил просто выборочно удалить ее из уравнения.

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostback && Request["__EVENTTARGET"] == "ctl00$Login1$loginbuttonID")
        Page.Validators.Remove(recaptcha);
}
0 голосов
/ 25 мая 2010

Я не уверен на 100%, что это связано, но у меня была проблема с запуском элемента управления ReCaptcha при каждой обратной передаче - логика свойства IsValid была ошибочной. Я исправил эту конкретную проблему: http://code.google.com/p/recaptcha/issues/detail?id=56#c3

К сожалению, проект ReCaptcha несколько застоялся, и в течение некоторого времени не было внесено никаких исправлений.

0 голосов
/ 25 мая 2010

Что вы должны сделать, это следующее:

<form runat="server"></form>

Должен быть обернут вокруг всего содержимого вашей страницы, в вашем случае - на главной странице, поскольку здесь также есть логин.

С этого момента вы можете просто удалить элемент управления recaptcha на любой странице, которая получена из данной главной страницы. Вам больше не нужен ни один тег <form runat="server"></form>.

Вы должны понимать, что элемент управления recaptcha не привязан ни к кнопке html формы отправки , ни к какой-либо другой определенной кнопке. Каждый раз, когда страница отправляет обратно, recaptcha устанавливает флаг Page.IsValid.

К сожалению, recaptcha не соответствует стандартам ASP.NET, используя инициируемую проверку в сочетании с группами проверки.
Таким образом, чтобы предотвратить повторную проверку recaptcha, вы должны установить: SkipRecaptcha = true

Это приводит к тому, что recaptcha не проверяется. Итак, теперь сценарий входа покрыт. Когда вы действительно хотите использовать функциональность recaptcha, вы просто устанавливаете SkipRecaptcha = false и вызываете Page.Validate(). После этого вы можете продолжить, как и раньше, с Page.IsValid.

Более чистым и лучшим подходом было бы переписать элемент управления recaptcha с использованием класса BaseValidator. Это позволит вам указать группу проверки в элементе управления recaptcha и кнопку, которая отправляет входные данные, которые вы хотите защитить, через recaptcha. В этом случае нажатие кнопки приведет только к проверке указанной группы проверки.
Кроме того, вы должны указать группу проверки для кнопки входа в систему или установить CausesValidation = false. Если группа проверки не установлена ​​и кнопка будет нажата, все группы проверки будут проверены автоматически.
Это, однако, достаточно продвинуто, так что даже ребята из recaptcha отказались от этого, хотя в системе контроля версий все еще есть старая версия. Нет гарантии, что эта версия все еще работает. Дайте нам знать, как вы решили.

...