[Перевод] ASP.Net Core: реализуем проверку Google reCAPTCHA V2

В этой статье Мудассар Хан (Mudassar Khan) продемонстрирует нам, как реализовать проверку Google reCAPTCHA V2 (версии 2.0) в ASP.Net Core MVC. 

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

Скачать код

В этой статье я покажу вам на примере, как реализовать проверку Google reCAPTCHA V2 (версии 2.0) в ASP.Net Core MVC.

Google reCAPTCHA V2 будет проверять ответы с капчей, получаемые из коллбэк-функций в JavaScript.

Примечание: Если вы только начинаете работать с ASP.Net MVC Core, пожалуйста, почитайте сначала мою статью «ASP.Net MVC Core Hello World Tutorial with Sample Program example».

Для начала вам нужно получить публичный и приватный ключи на сайте Google RECaptcha. Как получить публичный (Site key) и приватный (Secret key) ключи Google RECaptcha, вы можете узнать в этой статье.

Пространства имен

Вам нужно будет импортировать всего одно пространство имен:

using System.Net;

Модель

Следующий класс модели состоит из трех свойств. Свойства Key и Secret будут содержать ключ и секрет Google RECaptcha, а свойство Response будет использоваться для хранения ответа, возвращаемого из API Google RECaptcha.

public class RECaptcha
{
    public string Key = "";
 
    public string Secret = "";
    public string Response { get; set; }
}

Контроллер

Контроллер состоит из двух Action-методов.

Action-метод для обработки операции GET

Внутри этого Action-метода объект класса-модели RECaptcha возвращается в представление.

Action-метод для обработки AJAX-операции jQuery

Этот Action-метод обрабатывает вызов AJAX-функции jQuery из представления.

Примечание: следующий Action-метод обрабатывает AJAX-вызовы, поэтому тип возвращаемого значения установлен как JsonResult.

Ответ с капчей, т.е. пользовательский ввод, полученный из представления, отправляется на проверку в API Google RCaptcha. Впоследствии результат этой проверки сохраняется в свойство Response объекта класса-модели RECaptcha и, наконец, объект класса-модели RECaptcha возвращается в виде JSON обратно в представление.

public class HomeController : Controller
{
    // GET: Home
    public IActionResult Index()
    {
        return View(new RECaptcha());
    }
 
    [HttpPost]
    public JsonResult AjaxMethod(string response)
    {
        RECaptcha recaptcha = new RECaptcha();
        string url = "https://www.google.com/recaptcha/api/siteverify?secret=" + recaptcha.Secret + "&response=" + response;
        recaptcha.Response = (new WebClient()).DownloadString(url);
        return Json(recaptcha);
    }
}

Представление

Внутри представления, в самой первой строке в качестве модели объявлен класс RECaptcha. Представление содержит HTML DIV, элемент HTML HiddenField и кнопку. На кнопку повешен обработчик jQuery-события click, чтобы при нажатии на эту кнопку запускалась проверка Google RECaptcha.

Внутри обработчика событий OnLoadCallBack API Google RECaptcha мы можем наблюдать, как RECaptcha отображается на странице с помощью функции-рендерера, которая принимает ID HTML DIV (внутри которого будет отображаться RECaptcha), публичный ключ Google RECaptcha и обработчик колбеков.

Когда пользователь правильно отвечает на капчу, тригерится колбэк. Обработчик событий, повешенный на этот коллбек, принимает ответ с капчей (который представляет собой закодированное строковое значение).

Значение ответа с капчей отправляется в Action-метод AjaxMethod (описанный выше), который затем возвращает обратно JSON-объект, состоящий из результата, возвращенного из API Google RECaptcha.

Возвращенный результат сохраняется в элементе HiddenField, чтобы можно было скрыть сообщение об ошибке проверки, если результатом является «Success», т.е. ответ на капчу правильный.

Примечание: Если вы столкнулись с проблемами при выполнении AJAX-вызовов в ASP.Net Core, почитайте мою статью: [SOLVED] jQuery AJAX POST not working in ASP.Net Core.

Событие Button Click проверяет, что при нажатии на кнопку HiddenField содержит результат Success, иначе пользователю будет предложено решить Google RECaptcha еще раз путем отображения сообщения об ошибке.

@model Google_ReCaptcha_MVC_Core.RECaptcha
 
@{
    Layout = null;
}
 

 


    
    Index
    


    

Скриншоты

Google RECaptcha реализованная в ASP.Net MVC

Сообщение об ошибке RequiredFieldValidator, когда решение капчи не было предоставлено

Сообщение об ошибке Google RECaptcha, которое отображается при неправильном ответе

Правильный ответ на Google RECaptcha

Сообщение об ошибке, которое отображается, когда статус успеха Google RECaptcha SiteVerify API имеет значение False

Загрузки

Скачать код
Скачать бесплатно Word/PDF/Excel API

Приглашаем всех желающих на открытое занятие, посвященное изучению конвейеров ПО промежуточного слоя (Middleware). На этом бесплатном вебинаре вы узнаете:

  • как работает конвейер запроса в ASP.NET Core;

  • в каком порядке вызываются middleware в цикле запрос/ответ;

  • как написать свой middleware, и в каком случае это может быть нужно;

  • примеры кастомных middleware для разных задач.

Урок будет полезным для вас, если вы чувствуете, что стандартный пайплайн запрос/ответ вас перестал устраивать и хотите добавить свои шаги в обработку запроса сервисом.

Занятие пройдет в преддверии старта курса «C# ASP.NET Core разработчик». Записаться на урок можно по ссылке.

© Habrahabr.ru