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