public async Task <Unit> Handle(ChangeEmailValidateCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Se va a validar el cambio de email para el usuario {request.UserId}");
            var user = await _userManager.FindByIdAsync(request.UserId);

            if (user is null)
            {
                _logger.LogWarning($"El usuario {request.UserId} no existe en la base de datos");
                throw new NotFoundException(nameof(UserManager <ApplicationUser>), nameof(request.UserId));
            }

            var identityResult = await _userManager.ChangeEmailAsync(user, request.NewEmail, request.Code);

            if (!identityResult.Succeeded)
            {
                foreach (var error in identityResult.Errors)
                {
                    _logger.LogWarning($"Usuario {request.UserId}, error al validar token: {error.Description}");
                    _validationFailureService.Add(Errors.NonFieldErrors, error.Description);
                }

                _validationFailureService.RaiseException();
            }

            _logger.LogInformation($"El usuario {user.Id} ha validado con éxito el cambio de email");

            return(Unit.Value);
        }
        public async Task <Unit> Handle(ChangePasswordCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Usuario {request.Id} va a cambiar el password");
            var user = await _userManager.FindByIdAsync(request.Id);

            if (user is null)
            {
                _logger.LogWarning($"Usuario {request.Id} intenta cambiar contraseña y no existe");
                throw new NotFoundException(nameof(ApplicationUser), nameof(request.Id));
            }

            // Cambiar contraseña.
            var changePasswordResult =
                await _userManager.ChangePasswordAsync(user, request.OldPassword, request.NewPassword);

            if (!changePasswordResult.Succeeded)
            {
                foreach (var error in changePasswordResult.Errors)
                {
                    _logger.LogWarning($"Usuario {request.Id}, error al cambiar contraseña: {error.Description}");
                    _validationFailureService.Add(Errors.NonFieldErrors, error.Description);
                }

                _validationFailureService.RaiseException();
            }

            var changePasswordViewModel = _mapper.Map <ChangePasswordDto>(user);

            changePasswordViewModel.SiteName = _webApiConfig.SiteName;
            await EmailNotifyChangePasswordAsync(changePasswordViewModel);

            _logger.LogInformation($"El usuario {user.Id} ha cambiado contraseña con éxito");

            return(Unit.Value);
        }