我正在使用ASP.NET Identity Framework。我有自己的UserStore
已实施。
我想允许我的用户更新他们的用户名,但是当我User.Identity.Name
没有更新时。它似乎只是该属性的getter
所以我无法直接更新它。似乎在使用AuthenticationManager登录时设置了此值。
这是我的签到脚本:
User user = await UserManager.FindAsync(model.LoginUserName, model.LoginPassword);
if (user == null)
{
ModelState.AddModelError("UserLoginError", "Invalid username or password");
}
else
{
ClaimsIdentity identityUser = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
AuthManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identityUser);
if (!string.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Dashboard");
}
}
以下是我更新用户名(和其他用户属性)的方法:
// Get the user from the user manager
User dbUser = await this.UserManager.FindByIdAsync(userId);
// Update the values
dbUser.UserName = model.UserName;
dbUser.Email = model.Email;
dbUser.Bio = model.UserBio;
dbUser.FullName = model.FullName;
// Use user manager to update the user
await this.UserManager.UpdateAsync(dbUser);
以下是我在UpdateAsync()
中的UserStore
实施内容:
public Task UpdateAsync(User user)
{
var context = userStore.Context as QuizEntities;
context.Users.Attach(user);
context.Entry(user).State = EntityState.Modified;
context.Configuration.ValidateOnSaveEnabled = false;
return context.SaveChangesAsync();
}
SO上的现有答案建议您再次签署用户并重新登录。如果这确实是唯一的方法,这是否可以保持用户现有会话数据的完整性?