public async Task <IResult <IAccessTokenOutput> > Handle(UserCredentialsInput userInput, CancellationToken cancellationToken)
        {
            var validationResult = Validator.Validate(userInput);

            if (validationResult.Errors.Count > 0)
            {
                return(new Result <IAccessTokenOutput>(validationResult.Errors));
            }

            var user = await UserService.FindByNameAsync(userInput.UserName, cancellationToken);

            if (user == null)
            {
                validationResult.Errors.Add(
                    new ValidationError()
                {
                    PropertyName = nameof(IUserCredentialsInput.UserName),
                    Errors       = new [] { "User does not exist." }
                }
                    );
            }

            if (user != null && !(await UserService.CheckPasswordAsync(user, userInput.Password, cancellationToken)))
            {
                validationResult.Errors.Add(
                    new ValidationError()
                {
                    PropertyName = nameof(IUserCredentialsInput.Password),
                    Errors       = new [] { "Invalid password." }
                }
                    );
            }

            if (validationResult.Errors.Count > 0)
            {
                return(new Result <IAccessTokenOutput>(validationResult.Errors));
            }

            var roleName    = (await UserService.GetRolesAsync(user, cancellationToken)).FirstOrDefault();
            var tokenString = await JwtAuthManager.GenerateJwtAsync(userInput, roleName, cancellationToken);

            return(new Result <IAccessTokenOutput>(new AccessTokenOutput(tokenString)));
        }
        public async Task <IActionResult> Login([FromBody] UserCredentialsInput loginCredentials)
        {
            var result = await LoginCommand.Value.LoginAsync(loginCredentials);

            return(PresentResult(result));
        }
Beispiel #3
0
        public async Task <IActionResult> Login([FromBody] UserCredentialsInput loginCredentials, CancellationToken cancellationToken)
        {
            var result = await Mediator.Value.Send(loginCredentials, cancellationToken);

            return(PresentResult(result));
        }