MVC5,实体框架,加密自定义注册

时间:2016-11-22 23:37:27

标签: c# asp.net-mvc entity-framework

我是.Net的新手,我需要你的帮助。我为我的项目使用代码优先方法,并且我尝试使用加密构建自定义注册/登录。由于某种原因,我在尝试加密密码时无法将用户保存在我的数据库中。当我删除2行加密和盐析时,将用户保存在数据库中。这是我的用户模型:

public class User
{
    [Key]
    public int UserId { get; set; }

    [Required(ErrorMessage = "First Name is required !")]
    [Display(Name = "First Name: ")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name is required !")]
    [Display(Name = "Last Name: ")]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Email is required !")]
    [EmailAddress]
    [StringLength(50)]
    [RegularExpression(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$", ErrorMessage = "Please enter valid email")]
    [Display(Name = "Email Address: ")]
    public string Email { get; set; }

    [StringLength(50)]
    [Display(Name = "Company Name: ")]
    public string CompanyName { get; set; }

    [Required(ErrorMessage = "Password is required !")]
    [DataType(DataType.Password)]
    [Display(Name = "Password: ")]
    public string Password { get; set; }

    [NotMapped]
    [DataType(DataType.Password)]
    [Compare("Password", ErrorMessage = "Passwords don't match !")]
    public string ConfirmPassword { get; set; }

    public string PasswordSalt { get; set; }

    public int AdminCode { get; set; }
}

这是我控制器中的Register方法:

    [HttpPost]
    public ActionResult Register(Models.User user)
    {
            if (ModelState.IsValid)
            {
                using (AppContext db = new AppContext())
                {
                    var crypto = new SimpleCrypto.PBKDF2();
                    var encrypPass = crypto.Compute(user.Password);

                    //var newUser = db.Users.Create();
                    //newUser.FirstName = user.FirstName;
                    //newUser.LastName = user.LastName;
                    //newUser.Email = user.Email;
                    //newUser.CompanyName = user.CompanyName;
                    //newUser.Password = encrypPass;
                    //newUser.PasswordSalt = crypto.Salt;
                    //newUser.AdminCode = 0;                       

                    user.Password = encrypPass;
                    user.PasswordSalt = crypto.Salt;

                    db.Users.Add(user);
                    db.SaveChanges();
                    return RedirectToAction("Index", "Home");

                }
            }
            else
            {
                ModelState.AddModelError("", "Data is not correct");
            }
        return View();
    }

Here is my table.。当尝试加密时,我得到错误"一个或多个实体的验证失败。",但我不知道验证失败了什么。我已经检查了我的数据库表和用户模型,但我没有看到问题所在。我真的试图通过自己来解决这个问题,但我无法做到!有什么想法我错过了什么?提前谢谢。

0 个答案:

没有答案
相关问题