Beispiel #1
0
        public async Task <UserLoginModelOut> GetUserAsync(UserLoginModelIn modelIn)
        {
            GeneralDbContext db = new GeneralDbContext();

            var ret = db.Database.SqlQuery <UserLoginModelOut>("SELECT Id,AccessCode,Name FROM v_user WHERE AccessCode=@AccessCode AND Pass=@Password",
                                                               new SqlParameter("AccessCode", modelIn.AccessCode),
                                                               new SqlParameter("Password", modelIn.Password.ToBase64()));

            if (ret == null)
            {
                return(null);
            }


            var _list = await ret.ToListAsync();

            if (_list.Count == 0)
            {
                return(null);
            }
            else
            {
                return(_list[0]);
            }
        }
        public async Task <IHttpActionResult> Login(UserLoginModelIn modelIn)
        {
            try
            {
                if (modelIn.IsNull())
                {
                    return(BadRequest(new ApiMessageResponse <TokenModelOut>("Modelo Inválido")));
                }
                if (!ModelState.IsValid)
                {
                    return(BadRequest(new ApiMessageResponse <TokenModelOut>(ModelState.StringifyModelErrors())));
                }

                UserService userService = new UserService();

                UserLoginModelOut _user = await userService.GetUserAsync(modelIn);

                if (_user.IsNull())
                {
                    return(BadRequest(new ApiMessageResponse <TokenModelOut>("Usuario no válido")));
                }

                var secretKey        = ApplicationJjwtContext.SecretKey;
                var secretKeyMessage = ApplicationJjwtContext.SecretKeyMessage;
                var sessionMinutes   = ApplicationJjwtContext.SessionMinutes;

                var TokenModelIn = new TokenModelIn()
                {
                    UserId = _user.Id.ToString(),

                    UserFullName = _user.Name,

                    SessionMinutes = sessionMinutes
                };

                if (!string.IsNullOrEmpty(secretKeyMessage))
                {
                    return(BadRequest(new ApiMessageResponse <TokenModelOut>("No autenticado")));
                }

                var ret = JjwtTokens.CreateToken(secretKey, TokenModelIn);

                ret.UserId   = _user.Id;
                ret.UserName = _user.Name;

                return(Ok(new ApiMessageResponse <TokenModelOut>(ret)));
            }
            catch (Exception ex)
            {
                return(BadRequest(new ApiMessageResponse <TokenModelOut>(ex.GetFirstException().Message)));
            }
        }
        public async Task <UserLogInModelOut> LogIn(UserLoginModelIn modelIn, UserTokenSessionModel userTokenSessionModel)
        {
            UserTokenSession userTokenSession = _mapper.Map <UserTokenSession>(userTokenSessionModel);

            UserLogInModelOut response = new UserLogInModelOut();

            User user = await _repos.Users.GetUserByEmailAndPassword(modelIn.Email, modelIn.Password);

            if (user == null)
            {
                response.AddError(CustomErrorEnum.UnsuccessfulLogIn);

                return(response);
            }

            response.Id              = user.Id;
            response.Email           = user.Email;
            response.EmailIsVerified = user.EmailIsVerified;
            response.PhoneNumber     = user.PhoneNumber;
            response.Token           = HashingUtilities.GetHashSHA512(Guid.NewGuid().ToString());

            userTokenSession.UserId         = user.Id;
            userTokenSession.Date           = DateTime.UtcNow;
            userTokenSession.LastUpdateDate = DateTime.UtcNow;
            userTokenSession.Token          = response.Token;

            await _repos.UserTokenSessions.Create(userTokenSession);

            if (await _repos.SaveAsync() == 0)
            {
                response.AddError(CustomErrorEnum.UnsuccessfulLogIn);

                return(response);
            }

            UserTokenSessionCacheModel clientTokenSessionCacheModel = _mapper.Map <UserTokenSessionCacheModel>(userTokenSession);

            _memoryCache.Set(response.Token, clientTokenSessionCacheModel, _cacheExpirationByMinutes.Value);

            return(response);
        }