Asp net core 2.2,更新用户名无效

Asp net core 2.2, updating usename not working

我希望我的用户能够更改他的用户名,所以我做了这个:

        <form asp-action="UpdateUserProfile" asp-controller="Account" method="post">

            <div class="account-details-item">
                <h2 class="center-text text-left account-details-item-title">UserName:</h2>
                <input name="username" id="username-text" readonly="readonly" class="center-text account-details-item-value" asp-for="User.UserName" value=@Model.User.UserName>
                <a id="btn-username" class="account-details-item-btn" >Edit</a>
            </div>
            <div class="account-details-item">
                <h2 class="center-text text-left account-details-item-title">Email:</h2>
                <input name="email" readonly="readonly" id="email-text" class="center-text account-details-item-value email" asp-for="User.Email" value=@Model.User.Email />
                <a id="btn-email" class="account-details-item-btn" >Edit</a>
            </div>
            <div class="account-details-item">
                <h2 class="center-text text-left account-details-item-title">Phone number:</h2>
                <input name="phonenumber" readonly="readonly" id="phone-text" class="center-text account-details-item-value" asp-for="User.PhoneNumber" value=@Model.User.PhoneNumber>
                <a id="btn-phone" class="account-details-item-btn" >Edit</a>
            </div>
            <div class="btns-container">
                <div class="btn-item"><a asp-action="Index" asp-controller="Cart" asp-route-id=@Model.User.CartId>Go To Cart</a></div>
                <div id="save-btn" class="btn-item"><button type="submit">Save Changes</button></div>
            </div>
        </form>

并且在 AccountController 中:

        [HttpPost]
        public IActionResult UpdateUserProfile()
        {
            var username = Request.Form["username"];
            var phonenumber = Request.Form["phonenumber"];
            var email = Request.Form["email"];
            var user = _userService.GetUser(User);



            if(`enter code here`IsUsernameDiffrent(username))
            {
                _userService.UpdateUsername(User, username);

                _userManager.UpdateAsync(user.Result);
            }
            else if(IsEmailDiffrent(email))
            {
                _userService.UpdateEmail(User, email);
                _userManager.UpdateAsync(user.Result);

            }
            else if (IsPhoneNumberDiffrent(phonenumber))
            {
                _userService.UpdatePhoneNumber(User, phonenumber);
                _userManager.UpdateAsync(user.Result);

            }

            return RedirectToAction("Index");
        }

并且在服务中Class:

   public async void UpdateUsername(ClaimsPrincipal user, string newUsername)
        {
            var currentUser = await GetUser(user);

            currentUser.UserName = newUsername;

            _dbContext.SaveChanges();
        }

问题是,如果用户更改了他的用户名,他仍然必须使用旧用户名登录, 在数据库中进行了更改,但每当我尝试使用新用户名登录时,它都会显示“无效登录尝试

感觉要多看代码才能分析问题。但是,当您对数据库中的数据进行更新或删除等更改时,请确保您在服务中使用事务范围。

使用此技术将确保代码的一致性。除非范围内的一切都成功,否则不会对数据库进行更改。比如你先更新再删除,如果删除的时候出现错误怎么办。然后您的数据将在数据库中更新但不会被删除。这是为了确保两者都成功发生或什么都没有发生。

参考这个 link。 https://docs.microsoft.com/en-us/ef/core/saving/transactions

我的项目中有一个更新用户操作,它在我的项目中确实有效,与你的有点不同,但你可以尝试这样改变它:

[HttpPost]
public async Task<IActionResult> UpdateUserProfile()
{
     var user = _userService.GetUser(User);

     if (user == null)
     {
         return StatusCode(404);
     }

     var username = Request.Form["username"];

     if(IsUsernameDifferent(username))
     {
         user.UserName = username;   

         var result = await _userManager.UpdateAsync(user);

         if (result.Succeeded)
         {
            return RedirectToAction("Action", "Controller");
         }

         return View();
     }
     return View();
}