如何在用户名更改时更新User.Identity.Name

时间:2014-10-07 08:41:10

标签: asp.net-mvc session-state asp.net-identity username

我正在使用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上的现有答案建议您再次签署用户并重新登录。如果这确实是唯一的方法,这是否可以保持用户现有会话数据的完整性?

0 个答案:

没有答案