C# - jQuery真人总是失败

时间:2016-02-02 06:13:29

标签: c# jquery jquery-plugins captcha

我使用jQuery-realperson插件。 但是,服务器端验证验证码值始终失败。 我在SO看到了类似的问题,但它是关于PHP上发生的问题。 我需要C#代码。

我的客户端 - js,基于knoskout.js:

   var validCaptcha = $.ajax({
                url: global.webApiConfig.getApiPath('Login/CheckCaptcha'),
                data: { Value: $('#captcha').data().realperson.hash, PersonValue: $('#captcha').val() },
                type: 'POST',
                cache: false,
                async: false
            });
            if (validCaptcha.responseText != true.toString()) {
                vm.captchaError('invalid value');
                refreshCaptcha();
                return;
            }

我的服务器端 - c#:

  [HttpPost]
    public bool CheckCaptcha(CaptachaData dataForCheck)
    {
        int hash = 5381;
        dataForCheck.Value = dataForCheck.Value.ToUpper();
        for (int i = 0; i < dataForCheck.Value.Length; i++)
        {
            hash = ((hash << 5) + hash) + dataForCheck.Value[i];
        }
        return dataForCheck.PersonValue != null &&  hash == dataForCheck.PersonValue.GetHashCode();
    }




public class CaptachaData
{
    public string Value { get; set; }
    public string PersonValue { get; set; }
}

1 个答案:

答案 0 :(得分:0)

我想我发现了错误! 你得到orignial-value的哈希码两次! 一次 - 在客户端:

   $('#captcha').data().realperson.hash

和一次 - 在服务器端:

   dataForCheck.PersonValue.GetHashCode()

您需要在服务器端进行更改:

  return dataForCheck.PersonValue != null &&  hash.ToString() == dataForCheck.PersonValue;