ASP.NET MVC: Кто ты милый человек или используем Captcha из MvcTools

Опубликовано 29.09.2012 12:50:00 в категории Микросервисы

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

Постановка задачи

Требуется проверить на то тот факт, что именно реальный человек отправляет форму на сервер, а не какой-нибудь робот. Так как существует множество сторонних библиотек и расширений, я решил добавить такой функционал и в свою Calabonga.Mvc.Extensions, которая устанавливается через nuget-пакет MvcTools.

Установливаем пакет

Для установки nuget-пакета используем команду, которую вводим в Nuget Manager Console:

PM> Install-Package mvctools
Attempting to resolve dependency 'XmlExport (? 0.2.1)'.
'MvcTools 1.7.0' already installed.
MvcCaptchaDemo already has a reference to 'MvcTools 1.7.0'.

PM> Install-Package mvctools

Пример использования captcha

Для примера я снова буду использовать форму обратной связи. И форма простая, и ViewModel’ы уже для нее имеются, и форма (Freeback.cshtml), короче, лучше не придумаешь. Первым делом создаем специальный метод контроллера (у меня он называется HomeController), который будет генерировать изображение:

public ActionResult Captcha() {
   return new CaptchaResult();
}

Обратите внимание на возвращаемый результат. Далее в на форме Feedback.cshtml я добавил код, который будет отображать картинку (captcha) и поле ввода для его подтверждения:

<div class="editor-label">
    @Html.ShowCaptcha("home", "captcha", 200, 50)
</div>
<div class="editor-field">
    @Html.Editor("captcha")<br />
    @Html.ValidationMessage("captcha")
</div>

В строке 2 указаны как параметры имя контроллера (controller) – “Home”, название действия (action) – “Captcha”, ширина – 200 (px) и высота 50 (px). В строке 5 и 6 – поле ввода подтверждения и, соответственно, место вывода сообщения об ошибке, если введен неверный код. Обратите внимание на параметры для 5 и 6 строки – “captcha”. Этот параметр - название поля ввода для Captcher, он поставляется по умолчанию. Но вы можете установить другой, но обязательно укажите его название в методе [post] у контролера. Мой метод такой:

[HttpPost]
[Captcher(MessageText = “Неверный код с картинки”)]
public ActionResult Feedback(FeedbackViewModel model) {
    if (ModelState.IsValid) {
        return View("FeedbackSent");
    }
    return View();
}

В строке 2 я поставил атрибут CaptcherAttribute, который и будет принимать от формы значение на проверку. Кстати, если задумаете менять название контрола для Captcher, то строке 2 в скобках в кавычках не забудьте его указать.

Вот так выглядит форма, а вернее captcha:

 

97-captcha

Существует и версия nuget-пакета для NET 4.5. Для того чтобы установить пакет воспользуйтесь командой:

PM> Install-Package MvcTools.Mvc4

Заключение

Как заключение хочу предложить ссылку на Nuget-Пакет MvcTools

Комментарии к статье ()

Загрузка...

Что-то пошло не по сценарию и завершилось ошибкой. Перезагрузить страницу (F5) 🗙

Переподключаем сервер...

Переподключение сломалось... Пробуем еще раз сек.

Не получилось переподключится.
Пожалуйста, обновите страницу F5

Сессия была поставлена сервером на паузу.

Восстановить сессию не получилось.
Пожалуйста, обновите страницу F5.