Exemplo n.º 1
0
        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());
        }