Recaptcha, инициированный от управления masterpage

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

5
задан XSL 17 May 2010 в 23:13
поделиться

3 ответа

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

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

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

3
ответ дан 15 December 2019 в 06:19
поделиться

Вам следует сделать следующее:

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

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

С этого момента вы можете просто разместить элемент управления recaptcha на любой странице, производной от данной главной страницы. Вам нигде не нужен другой тег

.

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

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

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

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

0
ответ дан 15 December 2019 в 06:19
поделиться

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

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

0
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: