setEmail($userEmail); $UsersValidate->setPassword($userPassword); /** Verifica se não existem erros a serem informados */ if (!empty($UsersValidate->getErrors())) { /** Informo */ throw new InvalidArgumentException($UsersValidate->getErrors(), 0); } else { /** Consulta o usuário junto ao banco de dados para verificar se é o primeiro acesso*/ $UsersResult = $Users->Access($UsersValidate->getEmail(), $UsersValidate->getPassword(), 'S'); /** Verifica se não existem resultados */ if( !is_object($UsersResult) ){ /** Consulta o usuário junto ao banco de dados */ $UsersResult = $Users->Access($userEmail, $userPassword, ''); /** Verifica se não existem resultados */ if( !is_object($UsersResult) ){ throw new InvalidArgumentException('Usuário não localizado, verifique o seu e-mail e senha.', 0); } } /** Caso existam resultados */ if( is_object($UsersResult) ){ /** Verifica se o usuário foi localizado */ if($UsersResult->user_id > 0){ /** Carrega as configurações de criptografia */ $config = $Main->LoadConfigPublic(); /** Parametros para descriptografar dados */ $method = $config->{'app'}->{'security'}->{'method'}; $firstKey = $config->{'app'}->{'security'}->{'first_key'}; /** Inicia a sessão do usuário */ $Main->SessionStart(); /** Cria as sessões pessoais necessárias para o usuário */ $_SESSION['USERSID'] = (int)$UsersResult->user_id; $_SESSION['USERSACLID'] = (int)$UsersResult->users_acl_id; $_SESSION['USERSEMAIL'] = (string)$UsersResult->email; $_SESSION['USERSNAMEFIRST'] = $Main->decryptData((string)$UsersResult->name_first); $_SESSION['USERSACCESSFIRST'] = (string)$UsersResult->access_first; $_SESSION['USERSACCESSLAST'] = (string)$UsersResult->access_last; /** Cria as sessões da empresa a qual o usuário está vinculado */ $_SESSION['USERSCOMPANYID'] = (int)$UsersResult->company_id; $_SESSION['USERSCOMPANYFANTASYNAME'] = (string)$UsersResult->fantasy_name; $_SESSION['USERSCOMPANYNAME'] = (string)$UsersResult->company_name; $_SESSION['USERSCOMPANYDOCUMENT'] = (string)$UsersResult->document; /** Cria o Token do usuário */ $_SESSION['USERSTOKEN'] = $Main->encryptData($config->app->security->hash.'-'.(int)$UsersResult->user_id.'-'.session_id()); /** Inicialização da sessão do usuário */ $_SESSION['USERSSTARTTIME'] = date("Y-m-d H:i:s"); /** Gera o cookie do usuário com duração de um dia */ setcookie("UserEmail", $Main->encryptData($UsersResult->email), time() + (86400 * 30), "/"); // 86400 = 1 day if($rememberAccess == 'S'){ setcookie("UserPassword", $Main->encryptData($UsersValidate->getPassword()), time() + (86400 * 30), "/"); // 86400 = 1 day setcookie("RememberAccess", $rememberAccess, time() + (86400 * 30), "/"); // 86400 = 1 day } /** Verifica se não é o primeiro acesso para validar a senha */ if( (!empty($UsersResult->password)) && (!empty($UsersResult->access_first)) ){ /** Verifica se a senha informada confere com seu hash */ if ( !password_verify($UsersValidate->getPassword(), $UsersResult->password) ) { throw new InvalidArgumentException('Autenticação falhou, verifique o seu e-mail e senha.', 0); } } /** Verifica se não é o primeiro acesso */ if($UsersResult->password_temp_confirm == 'N'){ /** Atualizo o acesso junto ao cadastro do usuário, caso não seja o primeiro acesso */ if($Users->AccessInfo('new')){ /** Informa o resultado positivo **/ $result = [ 'cod' => 202, 'title' => '', 'url' => '', # Define uma url especifica dentro da aplicação para carregar 'message' => 'Usuário autenticado com sucesso', ]; }else{/** Falha na gravação de log do usuário */ throw new InvalidArgumentException('Não foi possível efetuar o log de acesso do usuário', 0); } }else{/** Caso seja o primeiro acesso, informo o redirecionamento */ /** Informa o resultado positivo **/ $result = [ 'cod' => 301, 'title' => '', 'url' => 'first-access',/** Caso seja preciso encaminhar para uma url especifica */ 'message' => 'É necessário o cadastro da senha definitiva', ]; } /** Envio **/ echo json_encode($result); /** Paro o procedimento **/ exit; }else{//Caso o usuário não tenha sido localizado, informo throw new InvalidArgumentException('Usuário não localizado, verifique o seu e-mail e senha.', 0); } } } }catch(Exception $exception){ /** Preparo o formulario para retorno **/ $result = [ 'cod' => 0, 'message' => '', 'title' => 'Falha na autenticação', 'type' => 'exception', ]; /** Envio **/ echo json_encode($result); /** Paro o procedimento **/ exit; }