更新用户名和电子邮件

时间:2016-06-01 12:03:17

标签: asp.net asp.net-mvc asp.net-core

在Asp.net Core项目中,我使用下面的代码更改用户名和电子邮件。但是,在注销后,控制器中的“用户”属性不会更新。

obs。:这个“User”属性已经由控制器基类中的框架定义,它是一个“ClaimsPrincipal”类型。

控制器

    public async Task<IActionResult> Create(EditViewModel viewModel)
    {
        if (ModelState.IsValid)
        {
            var model = await _userManager.FindByIdAsync(CurrentUser.Id);
            model.UserName = viewModel.UserName;
            model.Email = viewModel.Email;

            await _userManager.UpdateAsync(model);

            //THIS ONE STILL HAS OLD VALUES ==============================
            Console.WriteLine(_userManager.GetUserName(User)); 

            //THIS ONE HAS NEWER VALUES ==================================
            model = await _userManager.FindByIdAsync(CurrentUser.Id);
            Console.WriteLine(model.UserName); 

            ...

我在视图中使用此“User”属性来显示用户信息,如下所示:

视图

@inject UserManager<ApplicationUser> UserManager
...
<p>Hello: @UserManager.GetUserName(User)</p>

1 个答案:

答案 0 :(得分:5)

这可能是因为您当前的用户将以类似于Claim(即内存)或Cookie的方式存储,以避免频繁点击数据库,因此为了获取新值,您需要注销并重新登录以刷新这些内容。

但是,您可以尝试通过调用RefreshSignInAsync()方法来执行代码,该方法应该处理相同的行为:

// Update your User
await _userManager.UpdateAsync(model);
// signInManager is an instance of SignInManager<ApplicationUser> and can be passed in via
// dependency injection
await signInManager.RefreshSignInAsync(existingUser);