Капча в регистрации Asp.Net WebForms 3.5 - PullRequest
1 голос
/ 27 сентября 2019

Я хотел бы внедрить 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!");
            }
        });
    });
})();
...