예제 #1
0
        public async Task <IActionResult> Login([FromBody] LoginInDto loginData)
        {
            if (string.IsNullOrWhiteSpace(loginData.Name) || loginData.Name.Length < 4 || loginData.Name.Length > 20)
            {
                return(BadRequest("Введен некорректный логин"));
            }

            var claims = new []
            {
                new Claim(ClaimTypes.NameIdentifier, Guid.NewGuid().ToString()),
                new Claim(ClaimTypes.Name, loginData.Name),
            };

            var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), new AuthenticationProperties
            {
                IsPersistent = true,
                AllowRefresh = true,
                ExpiresUtc   = DateTime.UtcNow.Add(TimeSpan.FromHours(24))
            });

            return(new ObjectResult(new
            {
                name = loginData.Name,
                identificator = claims[0].Value
            }));
        }
예제 #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
            });
        }
예제 #3
0
        public async Task <IActionResult> Login([FromBody] LoginInDto login)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                var _ = await _logic.Login(login);

                return(Ok(_));
            }
            catch (Exception e)
            {
                return(ExceptionResult(e));
            }
        }
예제 #4
0
        public ApiReponse <object> LoginIn(LoginInDto model)
        {
            var data = _crud.LoginIn(model);

            var token = _cache.Get <string>($"token_{data.Id.ToString()}");

            if (string.IsNullOrEmpty(token))
            {
                token = _jwt.JwtSecurityToken(data.Id, data.RoleId.ToString());
                _cache.Set($"token_{data.Id.ToString()}",
                           token,
                           TimeSpan.FromHours(2));
            }

            data.Token = token;
            return(new ApiReponse <object>(data));
        }
예제 #5
0
        public dynamic LoginIn(LoginInDto model)
        {
            model.Password = model.Password.Md5Encrypt();

            var entity =
                Repository.SingleOrDefault(item => item.UserName == model.UserName && item.Password == model.Password);

            if (entity == null)
            {
                throw new MarukoException("账号或者密码错误");
            }

            return(new
            {
                entity.Id,
                entity.RoleId,
                entity.UserName,
            });
        }