我正在尝试使用带有强类型视图模型的.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 Model传递给我的控制器,所以我的代码看起来有点像这样:
[HttpPost]
public ActionResult PersonDetails(PersonVM viewModel)
{
if(rpHash(viewModel.RealPersonCode) == viewModel.RealPersonCode.GetHashCode())
{
//accepted -- doesn't seem to work
}
}
我只是不确定客户端哈希的来源。
我是否应该在我的View Model中添加另一个名为realPersonHash的字段,然后在客户端上手动哈希?
查看文档:
if (rpHash(Request.Form["realPerson"] + salt) == Request.Form["realPersonHash"]) {
// Accepted
不清楚Request.Form [“realPersonHash”]的设置位置,或者如何设置它。
非常感谢任何帮助。
答案 0 :(得分:2)
发现答案实际上很直接。我需要在我的View Model中添加一个名为RealPersonHash的字段,
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!
}
这现在有效......希望它可以帮助别人。
答案 1 :(得分:0)
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
}