Я хотел бы внедрить re-captcha v.3, невидимую от Google, в моей регистрационной форме ASP.Net v3.5 и проверить ее вместе с другими полями.
Проблема 1: Ответ всегда ИСТИНЕН, и когда я изменяю значения из окна разработчика браузера (на: ответ на ложь и набираю значение 0,1), я не получаю экран вызова.
Проблема 2: Я пытался проверить его в событии CreateUserWizard1_CreatingUser (используя isCaptchaValid), но я не знаю, является ли это лучшим подходом.
Я использую следующий код для генерации / проверки повторного запроса.капча в регистрационной форме.
registration.cs
private static string recaptchaSecret = ConfigurationManager.AppSettings["SecretApiKey"].ToString();
private static string Token = string.Empty;
private static ResponseToken response = new ResponseToken();
private static bool? isCaptchaValid = null;
[WebMethod]
public static void SetToken(string _token)
{
Token = _token;
}
[WebMethod]
public static string CaptchaVerify()
{
//It should only call once
if (response.score == 0)
{
var responseString = RecaptchaVerify(Token);
response = JsonConvert.DeserializeObject<ResponseToken>(responseString);//.Result);
}
isCaptchaValid = response.Success;
return JsonConvert.SerializeObject(response);
}
private static string apiAddress = "https://www.google.com/recaptcha/api/siteverify";
private static string RecaptchaVerify(string recaptchaToken)
{
string url = String.Format("{0}?secret={1}&response={2}", apiAddress, recaptchaSecret, recaptchaToken);
using (System.Net.WebClient httpClient = new System.Net.WebClient())
{
try
{
string responseString = httpClient.DownloadString(url);//.Result;
return responseString;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
public class ResponseToken
{
public DateTime challenge_ts { get; set; }
public float score { get; set; }
public List<string> ErrorCodes { get; set; }
public bool Success { get; set; }
public string hostname { get; set; }
}
registration.aspx (до закрытия части)
<script src="//www.google.com/recaptcha/api.js?render=API_KEY"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('API_KEY', {action: 'homepage'}).then(function(token) {
$.ajax({
type: "POST",
url: "/registration.aspx/SetToken",
data: JSON.stringify({_token:token}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
console.log('Passed the token successfully : ' + Date(Date.now()).toString());
},
failure: function (response) {
alert(response.d + ' ' + Date(Date.now()).toString());
}
});
});
});
</script>
<script src="js/captchaverify.js"></script>
captchaverify.js
(function () {
$('#ctl00_ContentPlaceHolder1_CreateUserWizard1___CustomNav0_StepNextButton').click(function () {
alert('CaptchaVerify');
$.ajax({
type: "POST",
url: "../registration.aspx/CaptchaVerify",
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var _response = JSON.parse(response.d);
if (_response.score < 0.5) {
$('#status').text("Robot detectat !");
$('#status').removeClass('text-info').addClass('text-danger');
}
else {
$('#status').text("Utilizator de tip uman .");
$('#status').removeClass('text-error').addClass('text-success');
}
},
failure: function (response) {
$('#status').text("Error on Server!");
}
});
});
})();