コード例 #1
0
        public async Task <ApplicationResponse <LoginResponseDto> > Authenticate(LoginRequestDto authenticateRequest)
        {
            var userByMail = await _userRepository.GetAsync(x => x.EMail == authenticateRequest.EMail);

            if (userByMail is null)
            {
                return(new ApplicationResponse <LoginResponseDto>(ResponseState.Error,
                                                                  ResponseMessage.Error.UserNotFound));
            }

            var hashPassword = SecurityHelper.HashPassword(authenticateRequest.Password, userByMail.PasswordSalt);

            var user = await _userRepository.GetAsync(x =>
                                                      x.EMail == authenticateRequest.EMail && x.Password == hashPassword);

            if (user is null)
            {
                return(new ApplicationResponse <LoginResponseDto>(ResponseState.Error,
                                                                  ResponseMessage.Error.UserNotFound));
            }

            var claims = new List <Claim>
            {
                new("id", user.Id),
                new("email", user.EMail),
            };

            var jwtResult = _jwtAuthManager.GenerateTokens(user.EMail, claims.ToArray());
            await _tokenManager.AssignToken(jwtResult.AccessToken, jwtResult.RefreshToken);

            return(new ApplicationResponse <LoginResponseDto>(new LoginResponseDto
            {
                Id = user.Id,
                Name = user.Name,
                Surname = user.Surname,
                Mail = user.EMail,
                Company = user.Company?.Name,
                AccessToken = jwtResult.AccessToken,
            }));
        }