Чтоб сделать проверку ботов через Гугл РеКапчу нам понадобится:
1. Вспомогательный класс ответа
2. POST Контроллер, который провалидирует капчу
3. Разметка капчи, ее мы вынесем в частичное представление
4. Ajax запрос к контроллеру
namespace Core.Entities { /// <summary> /// Вспомогательный класс для работы с капчей. /// (The helper class for working with captcha.) /// </summary> public class CaptchaResponse { /// <summary> /// Возвращает true если капча прошла валидацию и false если нет. (Returns true if the CAPTCHA validation passed, and false if not.) /// </summary> public bool Success { get; set; } /// <summary> /// Получает или задает текст ошибки. (Gets or sets the error text.) /// </summary> public string ErrorMessage { get; set; } } }
namespace Core.Helpers { public static class ReCaptcha { [HttpPost] public static CaptchaResponse ValidateCaptcha(string response) { const string secret = "6LeGBigDickUABCDEFDtxRD2nRyqJVzxywveOELIXmn"; var client = new WebClient(); var reply = client.DownloadString( string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", secret, response)); var captchaResponse = Json.Decode(reply); //when response is false check for the error message if (!captchaResponse.Success) { return new CaptchaResponse() { Success = false, ErrorMessage = "error" }; } else { return new CaptchaResponse() { Success = true, ErrorMessage = "Все ок" }; } } } }
<script src='https://www.google.com/recaptcha/api.js'></script> <script type="text/javascript"> </script><form id="Recaptcha" action="@Url.Action(" ReCaptcha","Utility")" method="POST"> <div class="g-recaptcha" data-callback="imNotARobot" data-sitekey="6LeGBigDickUABCDEFDtxRD2nRyqJVzxywveOELIXmn"></div> </form> <script type="text/javascript"> var imNotARobot = function () { $('#PasswordRequest').prop('disabled', false).removeClass("disabled"); }; </script>
$.ajax({ url: "/Utility/ReCaptcha", method: "POST", data: $('#Recaptcha').serializeArray(), beforeSend: function () { $('#SmsPreload').show(); }, success: function (token) { $.post( "/user/auth/", { phone: phone, token: token }, function (res) { //подтянем форму авторизации $.ajax({ url: '/User/SignInForm/', dataType: 'html', data: { phone: phone }, beforeSend: function (data) { $('#SmsPreload').hide(); }, success: function (data) { $('#SignForm').html(data); $('.phone').inputmask("mask", { "mask": "+7(999)9999999", 'placeholder': ' ' }); } }); } ); } });
[HttpPost] public object Auth(string phone, string token) { CaptchaResponse captchaResponse = ReCaptcha.ValidateCaptcha(token); if (captchaResponse.Success == true) { if (User.Identity.IsAuthenticated) { return new EmptyResult(); } var response = WebApiHelper.Auth(phone); return response; } else { return Json(new { result = "error", message = "Код с картинки введен не верно!" }, JsonRequestBehavior.AllowGet); } }