Интеграция Google ReCaptcha На ASP.NET MVC

Чтоб сделать проверку ботов через Гугл РеКапчу нам понадобится:
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);
	}
}

Добавить комментарий