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; }
}