【发布时间】:2016-01-27 11:28:35
【问题描述】:
我正在尝试制作一个表单来注册新用户并将数据保存到使用 MVC 模式的实体框架中;问题是我正在尝试比较输入的密码如下(代码写在模型中)
[Required(ErrorMessage = "Enter Password!")]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
public string tPassword { get; set; }
[DataType(DataType.Password)]
[Compare("tPassword", ErrorMessage = "The password and confirmation password does not match.")]
public string Confirmpassword { get; set; }
下一步是对密码进行哈希处理并保存(我使用以下方法创建了一个名为Security的新类,以及其他验证密码的方法),代码如下:
public static void HashAndSavePassword(string password, RegisterTable usr)
{
var v = new Rfc2898DeriveBytes(password, 16, 3987);
usr.tPassword = Convert.ToBase64String(v.GetBytes(25), Base64FormattingOptions.None);
usr.Salt = Convert.ToBase64String(v.Salt, Base64FormattingOptions.None);
}
然后在控制器中我使用以下方法调用负责密码哈希的方法,然后将用户数据保存到实体框架中:
public ActionResult Register(RegisterTable user)
{
if (ModelState.IsValid)
{
// To check if username already exist
var searchUserName = db.RegisterTables.Where(x => x.tUserName.Equals(user.tUserName)).FirstOrDefault();
if (searchUserName == null)
{
Security.HashAndSavePassword(user.tPassword, user);
db.RegisterTables.Add(user);
db.SaveChanges();
ModelState.Clear();
return RedirectToAction("Login");
}
else ModelState.AddModelError("", "User is already Registred.");
}
return View(user);
}
问题是我在运行代码时遇到以下错误:
但是如果我删除这行代码会正常工作:
[Compare("tPassword", ErrorMessage = "The password and confirmation password does not match.")]
谁能向我解释为什么会发生这种情况以及如何解决这个问题?
【问题讨论】:
标签: c# model-view-controller hash passwords salt