MVC5以明文形式存储我的密码。我不想使用默认的散列算法,因为我需要来代替使用e.Encrypt()
。我正在创建注册功能,我需要知道如何在使用FormCollection
之前编辑TryUpdateModel
中的值。
以下是代码:
[HttpPost]
public ActionResult Register([Bind(Include = "User,Pass,Email")] FormCollection form)
{
var user = new Users();
string Hash = e.Encrypt(form["Pass"]); // Gets set.
if (TryUpdateModel(user, form))
{
context.Entry(user).State = EntityState.Added;
context.SaveChanges();
return RedirectToAction("Login", "Account");
}
return View();
}
我搜索过高低,我发现的一切与我的需求无关。
我试过这个:
form["Password"] = e.Encrypt(form["Password"])
...并编译,但在调试时,该值永远不会被设置。 e.Encrypt()
确实可以正常工作,所以不是这样。
我做错了什么?
答案 0 :(得分:0)
我在经过一些试验和错误后想出来了:
[HttpPost]
// Remove FormCollection and replace with UserModel.
public ActionResult Register([Bind(Include= "Username,Password,EmailAddress")] UserModel user)
{
if (TryUpdateModel(user))
{
// Set password in TryUpdate success.
user.Password = e.Encrypt(user.Password);; // Set correctly
context.Entry(user).State = EntityState.Added;
context.SaveChanges();
return RedirectToAction("Login", "Account");
}
return View();
}
然而,又出现了另一个问题,DataValidationError
。问题来自UserModel.cs
类:
[RegularExpression(RegexPassword, ErrorMessage = ErrorPassword)]
我有一个与哈希不匹配的正则表达式,所以当我尝试更新时,它无法验证。这对另一个线程来说是一个问题,但我现在就把它删除了。