Получение «EntityValidationError» при попытке сохранить хешированные данные в базе данных - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать форму регистрации в ASP.net, используя Entity Framework. Регистрация работает нормально, не пытаясь хэшировать данные, но когда я пытаюсь хэшировать данные, я получаю следующую ошибку: «EntityValidationErrors».

Классы шифрования

public class Encrypt
{
    public static string GetMD5Hash(string input)
    {
        using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) {
            byte[] b = System.Text.Encoding.UTF8.GetBytes(input);
            b = md5.ComputeHash(b);
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            foreach (byte x in b)
            {
                sb.Append(x.ToString("x2"));
            }
            return sb.ToString();

        }
    }
}

И

public class CustomPasswordHasher : IPasswordHasher
{
    public string HashPassword(string password)
    {
        return Encrypt.GetMD5Hash(password);
    }

    public PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
    {
        if (hashedPassword == HashPassword(providedPassword))
        {
            return PasswordVerificationResult.Success;
        }
        else
        {
            return PasswordVerificationResult.Failed;
        }
    }
}

Метод, в котором я пытаюсь зашифровать свои данные

[HttpPost]
    public ActionResult Register(CustomUser user)
    {
        CustomPasswordHasher cph = new CustomPasswordHasher();
        var hashedpw = cph.HashPassword(user.Password);
        user.Password = hashedpw;

        using (DBModelEntities dbModel = new DBModelEntities())
        {
            if (dbModel.CustomUsers.Any(x => x.Email == user.Email))
            {
                ViewBag.DuplicateMessage = "Email already in use";
                return View("Register", user);
            }

            dbModel.CustomUsers.Add(user);
            dbModel.SaveChanges();
        }

        ModelState.Clear();
        ViewBag.SuccesMessage = "Succes";
        return View("Register", new customUser());
    }

И мой класс CustomUserModel

public partial class CustomUser
{
    public int UserID { get; set; }
    [Required(ErrorMessage = "Verplicht")]
    public string Email { get; set; }
    [Required(ErrorMessage = "Verplicht")]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Required(ErrorMessage = "Verplicht")]
    [DataType(DataType.Password)]
    [DisplayName("Confirm password")]
    [Compare("Password")]
    public string ConfirmPassword { get; set; }

    public string LoginErrorMessage { get; set; }
}

Надеюсь, кто-нибудь поможет мне разобраться!

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Прежде всего, спасибо за помощь. Я понял это, я хэшировал свой первый пароль, но не мой подтверждающий пароль. Из-за этого эти 2 пароля не были равны, и мое приложение не позволило записать это в базу данных.

0 голосов
/ 16 апреля 2019

Попробуйте получить точное сообщение об ошибке

 catch (DbEntityValidationException dbEx)
    {
        foreach (var validationErrors in dbEx.EntityValidationErrors)
        {
            foreach (var validationError in validationErrors.ValidationErrors)
            {
                Trace.TraceInformation("Property: {0} Error: {1}", 
                                        validationError.PropertyName, 
                                        validationError.ErrorMessage);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...