コード例 #1
0
        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." }));
        }