Как правильнее использовать Recaptcha для сайта на ASP.NET MVC?
Recaptcha в сайте на ASP.NET MVC
2
Спросил
Лучший ответ:
2
Нужно сделать следующее:
Скачать и подключить к проекту библиотеку recaptcha для .NET с официальной страницы.
Для генерации кода на страницах
Создать helper метод:
public static class CaptchaExtensions
{
public static string GenerateCaptcha(this HtmlHelper helper)
{
var captchaControl = new Recaptcha.RecaptchaControl
{
ID = "recaptcha",
Theme = "white",
PublicKey = "ВАШ_ОТКРЫТЫЙ_КЛЮЧ",
PrivateKey = "ВАШ_ЗАКРЫТЫЙ_КЛЮЧ"
};
var htmlWriter = new HtmlTextWriter(new StringWriter());
captchaControl.RenderControl(htmlWriter);
return htmlWriter.InnerWriter.ToString();
}
}
На нужных страницах сгенерировать код используя метод GenerateCaptcha:
<div>
<label for="recaptcha_response_field">Введите слова на картинке</label>
<%=Html.GenerateCaptcha()%>
<%=Html.ValidationMessage("Captcha")%>
</div>
Для проверки введенной капчи на сервере
Создать атрибут:
public class CaptchaValidatorAttribute : ActionFilterAttribute
{
private const string CHALLENGE_FIELD_KEY = "recaptcha_challenge_field";
private const string RESPONSE_FIELD_KEY = "recaptcha_response_field";
private const string CAPTCHA_MODEL_KEY = "Captcha";
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var captchaChallengeValue = filterContext.HttpContext.Request.Form[CHALLENGE_FIELD_KEY];
var captchaResponseValue = filterContext.HttpContext.Request.Form[RESPONSE_FIELD_KEY];
var captchaValidtor = new Recaptcha.RecaptchaValidator
{
PrivateKey = "ВАШ_ЗАКРЫТЫЙ_КЛЮЧ",
RemoteIP = filterContext.HttpContext.Request.UserHostAddress,
Challenge = captchaChallengeValue,
Response = captchaResponseValue
};
var recaptchaResponse = captchaValidtor.Validate();
if (!recaptchaResponse.IsValid)
{
filterContext.Controller
.ViewData.ModelState
.AddModelErrorWithValue(
CAPTCHA_MODEL_KEY,
"ТЕКСТ_СООБЩЕНИЯ_ОБ_ОШИБКЕ");
}
base.OnActionExecuting(filterContext);
}
}
Применить этот атрибут к методу контроллера, принимающего POST формы с капчей.