代码优先 - 验证密码和同一实体的哈希

时间:2013-10-21 10:08:04

标签: c# entity-framework code-first password-protection

  1. Code First
  2. 实体框架
  3. C#Visual Studio 2012
  4. 我有一个用户帐户实体,可以根据正则表达式验证密码

    是否有一个我可以使用的事件,它会在保存到数据库之前将密码转换为哈希值?

    我的问题是,如果我先将密码哈希,那么我就无法使用此实体进行验证。

    我考虑过将验证提取到其他区域,并且只将哈希值保存到实体。

    目前的流程如下

    1. 用户输入新帐户详情
    2. 已创建用户帐户实体
    3. 使用dataannotations验证的实体
    4. 密码哈希
    5. 实体保存到数据库
    6. 有人可以帮我解释一下密码哈希的位置吗

1 个答案:

答案 0 :(得分:-1)

如果你使用MVC,我的方法就像 -

将正则表达式放在Account类的Password字段中。

在AccountController的Create方法中:

  1. 检查模型状态是否有效 - 这将验证正则表达式和 所有其他必填字段。
  2. 调用您的哈希方法,并使用帐户对象上的哈希密码替换现有的纯文本密码
  3. 保存到数据库

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(User user)
    {
        if (ModelState.IsValid)
        {
            user.Password = PasswordHasher.Hash(user.Password);
            db.Users.Add(user);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    
        return View(user);
    }