繁体   English   中英

MVC中具有强类型视图模型的JQuery Real Person

[英]JQuery Real Person with strongly typed view model in MVC

我正在尝试使用具有强类型视图模型的.Net MVC实现JQuery Real Person。

我有一个人查看模型:

public class PersonVM
{
   public Guid Id {get; set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}
   // etc...
   public string RealPersonCode {get; set;}    

}

根据文档: http : //keith-wood.name/realPerson.html

我应该“将根据用户输入的文本计算出的哈希值与客户端生成的哈希值进行比较”

现在,我可以访问输入的文本的值,并使用文档在服务器上对其进行哈希处理,这不是问题。

但是我没有在示例中使用Request.Form [],而是将View模型传递给控制器​​,因此我的代码看起来像这样:

[HttpPost]
public ActionResult PersonDetails(PersonVM viewModel)
{
    if(rpHash(viewModel.RealPersonCode) == viewModel.RealPersonCode.GetHashCode())
    {
       //accepted -- doesn't seem to work
    }
}

我只是不确定客户端哈希来自哪里。

我是否应该在我的视图模型中添加另一个名为realPersonH​​ash的字段,然后在客户端上手动对其进行哈希处理?

查看文档:

if (rpHash(Request.Form["realPerson"] + salt) == Request.Form["realPersonHash"]) { 
    // Accepted

不清楚在哪里设置Request.Form [“ realPersonH​​ash”]或如何设置它。

任何帮助,将不胜感激。

发现答案实际上很简单。 我需要在视图模型中添加一个名为RealPersonH​​ash的字段,

public class PersonVM
{
   public Guid Id {get; set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}
   // etc...
   public string RealPersonCode {get; set;}
   public string RealPersonaHash {get; set;}    

}

然后在初始化程序中识别它:

<script>
    $('#RealPersonCode').realperson({ hashName: 'RealPersonHash'});
</script>

在我看来,我需要一个隐藏字段:

@Html.HiddenFor(model => model.RealPersonHash);

一旦安装好,就可以在服务器上比较两者。

    public ActionResult PersonDetails(PersonVM viewModel)
    {

        if (rpHash(viewModel.RealPersonCode) == viewModel.RealPersonHash)
        {
             // we have a real person!
        }

现在可以了...希望对其他人有所帮助。

user964769提供的解决方案不适用于我。 隐藏字段根本没有初始化。

我在这里找到了替代解决方案-https: //stackoverflow.com/a/35860708/5801881

特别是,调用$('selector').realperson('getHash')达到目的。

所以整个事情应该像下面这样。

HTML:

<input id="captcha_input" />

使用Javascript / jQuery的:

//Basic initialisation

$(function(){

    $('#captcha_input').realperson({ length: 6 });

})


//Send to server via desired method, eg...

function SubmitCaptcha(){

    var formData = new FormData();
    formData.append("realPerson", $('#captcha_input').val());
    formData.append("rpHash", $('#captcha_input').realperson('getHash'));

//Then AJAX it...
}

然后服务器端就像Realperson文档所说的那样简单:

if(rpHash(model.realPerson) == model.rpHash)
{
    //happy days, captcha corret
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM