Beispiel #1
0
        public async Task <Unit> Handle(RegisterValidateCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Se va a validar el registro 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");
                var errorMessage = _localizer["El usuario no existe"];
                _validationFailureService.AddAndRaiseException(Errors.NonFieldErrors, errorMessage);

                return(Unit.Value);
            }

            var code = HttpUtility.HtmlDecode(request.Code);
            var confirmEmailResult = await _userManager.ConfirmEmailAsync(user, code);

            if (!confirmEmailResult.Succeeded)
            {
                var message = _localizer["El tiempo de validación ha expirado"];
                _logger.LogWarning(message);
                _validationFailureService.AddAndRaiseException(Errors.NonFieldErrors, message);
            }

            user.Id             = request.UserId;
            user.EmailConfirmed = true;
            await _userManager.UpdateAsync(user);

            _logger.LogInformation($"Verificación de email para el usuario {user.Id} realizada con éxito");

            return(Unit.Value);
        }
Beispiel #2
0
        public async Task <CurrentUserDto> Handle(LoginCommand request, CancellationToken cancellationToken)
        {
            await _signInManager.SignOutAsync();

            await _httpContextAccessor.HttpContext.SignOutAsync();

            var user = await GetUserByUserNameOrEmail(request, cancellationToken);

            if (user.Active is false)
            {
                var error = _localizer["La cuenta no esta activa, por favor habla con un administrador"];
                _validationFailureService.AddAndRaiseException(Errors.NonFieldErrors, error);
            }

            var result = await _signInManager.PasswordSignInAsync(
                user.UserName,
                request.Password,
                request.RememberMe,
                false);

            if (!result.Succeeded)
            {
                InvalidUserNameOrPassword(request);
            }

            var roles = await _userManager.GetRolesAsync(user);

            var token = _jwtSecurityTokenService.CreateToken(user, roles);

            var loginCommandVm = _mapper.Map <CurrentUserDto>(user);

            loginCommandVm.Token = token;
            _logger.LogInformation($"Se ha identificado con éxito {request.UserName}");

            return(loginCommandVm);
        }
Beispiel #3
0
        private async Task UserValidationAsync(ApplicationUser applicationUser)
        {
            var validUser = await _userValidator.ValidateAsync(_userManager, applicationUser);

            if (!validUser.Succeeded)
            {
                var errorMessage = _localizer["El usuario no es valido"];
                _logger.LogWarning(errorMessage);
                _validationFailureService.Add(nameof(applicationUser.UserName), errorMessage);
            }

            // Comprueba si existe un FirstName y LastName iguales en la base de datos.
            var userExists = _userManager.Users.FirstOrDefault(
                u => u.FirstName == applicationUser.FirstName && u.LastName == applicationUser.LastName);

            if (userExists != null)
            {
                // Si existe, lanza al excepción para no llegar hacer la consulta ya que daria un 500.
                var errorMessage = _localizer["Ya existe un usuario con ese nombre y apellidos"];
                _validationFailureService.AddAndRaiseException(nameof(applicationUser.FirstName), errorMessage);
            }
        }