public async Task <TokenCouple> RenewAsync(TokenCouple tokenCouple) { var handler = new JwtSecurityTokenHandler(); var jwtObject = handler.ReadJwtToken(tokenCouple.Jwt); var userId = jwtObject.Claims.FirstOrDefault(x => x.Type == JwtRegisteredClaimNames.NameId).Value; var tokenCoupleFromDb = await _unitOfWork.TokenCoupleRepository .Filter(x => x.Refresh == tokenCouple.Refresh && x.Jwt == tokenCouple.Jwt) .FirstOrDefaultAsync(); if (tokenCoupleFromDb != null) { var user = await _userManager.FindByIdAsync(userId); if (!user.IsDeleted) { return(await GetTokenCouple(user.UserName, user)); } else { throw new WebsiteException("Renew Failed! User has been deleted!"); } } else { throw new WebsiteException("Renew Failed! Refresh token doesn't exist!"); } }
private async Task <TokenCouple> GetTokenCouple(string login, User appUser) { var result = new TokenCouple() { Jwt = GenerateJwtToken(login, appUser), Refresh = GenerateRefreshToken() }; var tokenCouple = _unitOfWork.TokenCoupleRepository.Create(result); await _unitOfWork.Save(); return(tokenCouple); }
public async Task <IActionResult> Renew([FromBody] TokenCouple model) { var result = await _service.RenewAsync(model); return(Json(result)); }