0

I have this web api method in ASP.NET Core:

        [HttpPost("Refresh")]
        public async Task<IActionResult> Refresh([FromBody]TokenRefreshDto tokenRefreshDto)
        {
            var principal = _userService.GetPrincipalFromExpiredToken(tokenRefreshDto.Token);
            var username = principal.Identity.Name; 

            var user = await _userService.GetUserByUserName(username);
            if (user == null || await _userManager.GetAuthenticationTokenAsync(user,"Default","RefreshToken") != tokenRefreshDto.RefreshToken) return BadRequest();

            var newJwtToken = await _userService.GenerateJwtToken(user);

            await _userManager.RemoveAuthenticationTokenAsync(user, "Default", "RefreshToken");
            var newRefreshToken = await _userManager.GenerateUserTokenAsync(user, "Default", "RefreshToken");
            await _userManager.SetAuthenticationTokenAsync(user, "Default", "RefreshToken", newRefreshToken);

            return new ObjectResult(new
            {
                token = newJwtToken,
                refreshToken = await _userManager.GetAuthenticationTokenAsync(user, "Default", "RefreshToken")
            });
        }

When I try to refresh the RefreshToken it gives following error:

InvalidOperationException: The instance of entity type "User" cannot be tracked
        because another instance with the same key value for "Id" is already being tracked

My User class is derived from IdentityUser :

public class User : IdentityUser<int>
    {
        public string Name { get; set; }
        public string LastName { get; set; }
        public string MobilePhone { get; set; }
        public string Address { get; set; }
        public Guid? ShopId { get; set; }
        public DateTime LastActive { get; set; }
        public virtual Shop Shop { get; set; }

    }
amin mohammadi
  • 901
  • 2
  • 15
  • 33

0 Answers0