net mvc management implement how current aspnetusers asp asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

asp.net - mvc - login identity asp net



MVC5 ApplicationUser propiedades personalizadas (3)

Explore IdentityManager.Store.UserManagement e IdentityManager.Store.Users .

ApplicationUser cUser = (ApplicationUser) await IdentityManager.Store.Users.FindByNameAsync(HttpContext.User.Identity.Name, new System.Threading.CancellationToken()); cUser.Surname = "New Something"; IdentityResult result1 = await IdentityManager.Store.SaveChangesAsync();

El código anterior es solo un ejemplo. Básicamente, debe explorar la propiedad Store de IdentityManage .

Estoy tratando de familiarizarme con el nuevo sistema de membresía presentado en ASP.NET MVC 5 y me he encontrado con un pequeño problema con el que estoy seguro de que me podrán ayudar.

Voy a basarme en este tutorial y he introducido propiedades personalizadas para ApplicationUser como Name, Surname, DOB, etc.

Sin embargo, en lugar de crear al usuario, estoy tratando de actualizar el que está actualmente conectado. Estoy mirando el método de controlador que se usa actualmente para cambiar la contraseña.

public async Task<ActionResult> Manage(ManageUserViewModel model) { string userId = User.Identity.GetUserId(); bool hasLocalLogin = await IdentityManager.Logins.HasLocalLoginAsync(userId); ViewBag.HasLocalPassword = hasLocalLogin; ViewBag.ReturnUrl = Url.Action("Manage"); if (hasLocalLogin) { if (ModelState.IsValid) { IdentityResult result = await IdentityManager.Passwords.ChangePasswordAsync(User.Identity.GetUserName(), model.OldPassword, model.NewPassword); if (result.Success) { return RedirectToAction("Manage", new { Message = "Your password has been changed." }); } else { AddErrors(result); } } } else { // User does not have a local password so remove any validation errors caused by a missing OldPassword field ModelState state = ModelState["OldPassword"]; if (state != null) { state.Errors.Clear(); } if (ModelState.IsValid) { // Create the local login info and link it to the user IdentityResult result = await IdentityManager.Logins.AddLocalLoginAsync(userId, User.Identity.GetUserName(), model.NewPassword); if (result.Success) { return RedirectToAction("Manage", new { Message = "Your password has been set." }); } else { AddErrors(result); } } } // If we got this far, something failed, redisplay form return View(model); }

¿Cómo voy a continuar con la actualización del apellido de la aplicación por ejemplo? ¿Debo llamar al DbContext o?

Espero que mi pregunta sea clara.


Cuando utilizamos el objeto Usuarios de nuestro contexto de base de datos, nos encontramos con otros errores de seguimiento. En nuestra aplicación, recuperaríamos usuarios como tales

var user = UserManager.FindById(userId);

Edite las propiedades:

user.StorageName = "gooblygook"; //whatever other properties you would like to use

Y luego lo guardaríamos con el UserManager en el controlador:

UserManager.Update(user);

Esta es actualmente una solución de trabajo para nosotros.


Marque el objeto Persona como virtual en su definición ApplicationUser. Eso funcionó para mí.

public class ApplicationUser : IdentityUser { public virtual Person Person { get; set; }