0

我在 ASP.NET Core 中有这个 web api 方法:

        [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")
            });
        }

当我尝试刷新 RefreshToken 时,会出现以下错误:

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

我的 User 类是从 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; }

    }
4

0 回答 0