예제 #1
0
        public async Task <object> Login(LoginDto dto)
        {
            var user = await _accountingRepo.GetLogin(x => x.Login.Equals(dto.Login));

            if (user == null)
            {
                throw new ArgumentException("Пользователь не найден!");
            }

            var alg = SHA512.Create();

            alg.ComputeHash(Encoding.UTF8.GetBytes(dto.Password));
            var pwdhash = Convert.ToBase64String(alg.Hash);

            // Reset password

            /*var password2 = "Sgs123456#";
             * var alg2 = SHA512.Create();
             * alg2.ComputeHash(Encoding.UTF8.GetBytes(password2));
             * var pwdhash2 = Convert.ToBase64String(alg2.Hash);*/

            if (user.Pwdhash != pwdhash)
            {
                throw new ArgumentException("Неверный пароль!");
            }

            return(new
            {
                AccessToken = _identityLogic.GenerateAccessToken(user.Id),
                RefreshToken = _identityLogic.GenerateRefreshToken(user.Id),
                User = $"{user.Login}"
            });
        }
예제 #2
0
        public async Task <object> Login(LoginInDto dto)
        {
            var user = await _baseLogic.Of <User>()
                       .GetQueryable(x => x.Login == dto.Login && !x.IsDeleted)
                       .Include(x => x.UserRoles)
                       .ThenInclude(x => x.Role)
                       .FirstOrDefaultAsync();

            if (user == default)
            {
                throw new ArgumentException("Пользователь не найден");
            }

            if (user.IsBlocked)
            {
                throw new ArgumentException("Пользователь заблокирован, обратитесь к администратору");
            }

            var pwdhash = HashPwd(dto.Password);

            if (user.Password != pwdhash)
            {
                user.PasswordTryCount++;
                if (user.PasswordTryCount >= 5)
                {
                    user.IsBlocked = true;
                }
                await _baseLogic.Of <User>().Update(user);

                throw new ArgumentException("Вами введен некорректный пароль. Введите пароль еще раз");
            }

            // сброс пароля
            user.PasswordTryCount = 0;
            user.LastInviteDate   = DateTime.Now;


            var accessToken  = _identityLogic.GenerateAccessToken(user);
            var refreshToken = _identityLogic.GenerateRefreshToken(user);

            user.RefreshToken = refreshToken;
            await _baseLogic.Of <User>().Update(user);

            return(new
            {
                accessToken,
                refreshToken
            });
        }