Aktualizacja adresu email w IdentityManager

0

Szybkie pytanie.

Dorabiam funkcjonalność do zmiany adresu email ( u mnie to jednocześnie UserName )

Zrobiłem tak:

 
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult ManageChangeEmail(ChangeUserEmailViewModel model)
        {
            var getUserEmail = User.Identity.GetUserName();
            var context = new ApplicationDbContext();
            if (ModelState.IsValid)
            {
                    ApplicationUser thisUser = context.Users.FirstOrDefault(n=>n.Email == getUserEmail);
                if (getUserEmail == thisUser.Email)
                {
                    var newEmail = model.NewEmail;
                    var newEmailConfirmed = model.ConfirmNewEmail;
                    if (newEmail == newEmailConfirmed)
                    {
                        thisUser.Email = newEmail;
                        thisUser.UserName = newEmail;

                        IdentityResult result = UserManager.Update(thisUser);
                        context.SaveChanges();
                        if (result.Succeeded)
                        {
                            return RedirectToAction("LogOff", "Account");
                        }
                        else
                        {
                            AddErrors(result);
                        }
                    }
                }
            }
            return RedirectToAction("Manage", "Account");
        }

Przesyłam sobie do okacji moj ViewModel. Następnie przepisuje wartości i chce zrobić Update(). Niby wszystko ok ale nic się nie aktualizuje w bazie.

Po zmianie email ( username ) chce wylogować użytkownika.

Co tu robie źle? :)

0

Trochę to zaktualizowałem ale nadal nie działa :(

 
 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult ManageChangeEmail(ChangeUserEmailViewModel model)
        {
            var context = new ApplicationDbContext();
            if (ModelState.IsValid)
            {
                ApplicationUser thisUser = context.Users.FirstOrDefault(n=>n.Email == model.CurrentEmail);
                if (model.CurrentEmail == thisUser.Email)
                {
                    if (model.NewEmail == model.ConfirmNewEmail)
                    {
                        thisUser.Email = model.NewEmail;
                        thisUser.UserName = model.NewEmail;
                        IdentityResult result = UserManager.Update(thisUser);
                        context.SaveChanges();
                        if (result.Succeeded)
                        {
                            return RedirectToAction("LogOff", "Account");
                        }
                        else
                        {
                            AddErrors(result);
                        }
                    }
                }
            }
            return RedirectToAction("Manage", "Account");
        }
0

Ok sorki za zaśmiecanie. Wiem już o co chodzi :)

Zamiast dokonywać aktualizacji całego obiektu metodą Update()

Wystarczy zrobić:

 
IdentityResult result = UserManager.SetEmail(thisUser.Id, thisUser.Email);

1 użytkowników online, w tym zalogowanych: 0, gości: 1