public async Task <ActionResult <Token> > CheckStatus([FromBody] QRToken token) { const int delayTime = 2000; var item = await _repo.GetById(token.Id); if (item == null) { return(BadRequest(new { error = "No such code." })); } for (int i = 0; i < 60000 / delayTime; i++) { // 获取最新数据 _repo.GetLatest(ref item); if (item.Expires < DateTime.UtcNow) { return(BadRequest(new { error = "Code expired." })); } else if (item.Status == 1) { var user = await _userRepo.GetUser(item.UserId.ToString()); var refreshToken = _service.GenerateRefreshToken(); // Return jwt token. return(new Token { AccessToken = _service.GenerateToken(new Claim[] { new Claim(ClaimTypes.NameIdentifier, user.UserId.ToString()), new Claim(ClaimTypes.Name, user.Username), new Claim(ClaimTypes.Role, user.UserGroup.ToString()), }), Expires = DateTime.UtcNow.AddDays(7).ToString(), RefreshToken = refreshToken, UserId = item.UserId }); } else { await Task.Delay(delayTime); } } return(StatusCode(408, new { error = "Request time out." })); }