У меня есть основная страница, которая содержит Управление входом в систему так, чтобы пользователь мог войти в систему/выйти из системы от любой страницы. Однако несколько страниц содержания требуют управления Recaptcha. Это вызывает проблемы, потому что, когда я пытаюсь войти в систему на странице, которая имеет контроль Recaptcha, система ожидает, что я введу слова. Я знаю об отсутствии групп проверки в управлении Recaptcha и том, что у Вас не может быть нескольких форм на странице ASP.NET. Существует ли способ работать вокруг этого? 'hacky' путем я могу думать, находится в событии "Login", проверьте страницу на управление Recaptcha. Если Вы существуете, то отключите его, иначе продолжите. Однако это просто кажется довольно неэффективным особенно, когда будет довольно много страниц, и большинство не будет иметь контроля Recaptcha.
Обходной путь для этой проблемы заключается в следующем:
Тема обсуждения в официальном списке рассылки разработчиков reCAPTCHA .
Вам следует сделать следующее:
<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 отказались от него, хотя в системе управления версиями все еще есть старая версия. Нет гарантии, что эта версия все еще будет работать. Сообщите нам, как вы решили.
Я не уверен на 100%, что это связано, но у меня была проблема с срабатыванием элемента управления ReCaptcha при каждой обратной передаче - логика свойства IsValid была некорректной. Я исправил эту конкретную проблему: http://code.google.com/p/recaptcha/issues/detail?id=56#c3
К сожалению, проект ReCaptcha несколько застопорился, и никакие исправления не помогли. в выпуск на некоторое время.