public async Task <IActionResult> ConfirmPhoneNumber([FromBody] ConfirmPhoneNumberRequest request) { var userId = User.FindFirstValue(JwtClaimTypes.Subject); var user = await _userManager.Users.Include(x => x.Claims).Where(x => x.Id == userId).SingleOrDefaultAsync(); if (user == null) { return(NotFound()); } if (user.PhoneNumberConfirmed) { ModelState.AddModelError(nameof(request.Token).ToLower(), _userManager.MessageDescriber.PhoneNumberAlreadyConfirmed); return(BadRequest(new ValidationProblemDetails(ModelState))); } var result = await _userManager.ChangePhoneNumberAsync(user, user.PhoneNumber, request.Token); if (!result.Succeeded) { return(BadRequest(result.Errors.ToValidationProblemDetails())); } var eventInfo = user.ToBasicUserInfo(); await _eventService.Publish(new UserPhoneNumberConfirmedEvent(eventInfo)); return(NoContent()); }