예제 #1
0
        public User Login(string email, string password)
        {
            User userResponse = null;

            //--- validação dos parâmetros
            _userValidation.ValidateEmail(email);
            _userValidation.ValidatePassword(password);

            //--- verifica se o usuário esta em cache
            var userCache = _memoryCache.Get <User> ($"userEmail-{email}");

            if (userCache == null)
            {
                //--- faz o login, verifica se logou
                userResponse = _userRepository.Login(email, password);

                //--- grava o usuário em cache por email
                _memoryCache.Set <User> ($"userEmail-{userResponse.Email}", userResponse);
            }
            else
            {
                userResponse = userCache;
            }

            //--- verifica se o usuário esta logado
            _userValidation.IsLogged(userResponse, password);

            //--- cria o token para esta sessão
            userResponse.Token = CreateToken();

            //--- grava o usuário em cache por id para a autenticacao dos usuários nos httprequest
            _memoryCache.Set <User> ($"userId-{userResponse.Id}", userResponse, DateTimeOffset.Now.AddHours(12));

            return(userResponse);
        }