public async Task <bool> Handle(RefreshTokenRequest message, IOutputPort <RefreshTokenResponce> outputPort) { var principals = _jwtValidator.GetPrincipalsFromToken(message.AccessToken, message.SigningKey); if (principals != null) { var id = principals.Claims.First(c => c.Type == "id"); var user = await _userReposytory.FindOneBySpec(new UserSpecification(id.Value)); if (user.HasValidRefreshTokens(message.RefreshToken)) { var jwtToken = await _jwtFactory.GenerateEncodedToken(user.IdentityId, user.UserName); var refreshToken = _tokenFactory.GenerateToken(); user.RemoveRefreshToken(message.RefreshToken); user.AddRefreshToken(refreshToken, user.Id, ""); await _userReposytory.Update(user); outputPort.Handle(new RefreshTokenResponce(jwtToken, refreshToken, true)); return(true); } } outputPort.Handle(new RefreshTokenResponce(false, "Invalid Refresh token")); return(false); }