/** * Método que efetua o login de usuários de acordo com as querys informadas. * Método usado somente para login via token * @param strin $query A query a ser executada para o login * @return booeal Retorna TRUE caso tenha efetuado login ou FALSE em caso de falha */ private function loginTokens($query) { $ret = FALSE; if (is_string($query)) { $busca = $this->testeExiste($query); } else { $busca = FALSE; } $busca = $this->testeExiste($query); if ($busca) { $user = $busca->fetchObject(); $usuario = new Usuario(); $usuario->setLoginToken(TRUE); $usuario->set_login($user->email); $usuario->set_senha($user->senha); $usuarioLogado = $usuario->loginUsuario(0, 0, 0, Loader::data("config", "site", "ano_letivo")); $sqlUsuario = new SqlUsuario(); if ($usuarioLogado) { //Definindo o tipo do vinculo $result = $sqlUsuario->get_tipo_usuario_vin($usuarioLogado->get_idUsuario(), $user->fk_tipo_usuario); $pkUsuarioTipoVin = $result[0]['pk_usuario_tipo_vin']; foreach ($usuarioLogado->get_tipoUsuario() as $tipo) { //Cria um loop com a array dos eventuais tipos de usuário que o mesmo está cadastrado if ($user->fk_tipo_usuario == $tipo->get_idTipoUsuario()) { //Setamos o tipo de usuário ativo $usuarioLogado->set_tipoUsuarioAtivo($tipo); //Seta a pk_tipo_usuario_vin $usuarioLogado->set_idUsuarioTipoVin($pkUsuarioTipoVin); $_SESSION['idTipoUsuario'] = $user->fk_tipo_usuario; //Definindo os dados da sessão $_SESSION['usuario'] = serialize($usuarioLogado); unset($_SESSION['erroUsuarioSenha']); $ret = $usuarioLogado; break; } } } else { $sqlUsuario->log_erro_login($user->email, "via token:" . $user->senha); } } return $ret; }
public function logar() { // Se foram enviados dados via post if ($_SERVER['REQUEST_METHOD'] == "POST") { try { $data = $this->getParametroVisao(); $_SESSION['formLogin'] = $this->input->post('formLogin'); // valida o formulário // View::validarFormAntInjection('formLogin'); // Se o número de erros for maior ou igual a 3 if ($_SESSION['erroUsuarioSenha']['qtd'] >= 3) { // Se a variável 'captcha' enviada for diferente da variável armazenada na sessão if (!$this->input->post('captcha') || strtolower($this->input->post('captcha')) != strtolower($_SESSION['erroUsuarioSenha']['codigo'])) { // grava na base o hora da última tentativa fracassada assim como incremeta o número de tentativas frustradas $sqlUsuario = new SqlUsuario(); $sqlUsuario->log_erro_login($this->input->post('email'), $this->input->post('senha')); // incremeta o número de erros $_SESSION['erroUsuarioSenha']['qtd'] += 1; // envia a mensagem de erro e redireciona a página de login, abortando o processamento $this->session->set_flashdata('msgLogin', 'Código inválido!'); redirect('usuario/login_w'); exit; } } // Se a operação não for abortada no passo anterior, prossegue com a criação de uma instância da classe 'usuario' $usuario = new Usuario(); $_SESSION['usuario'] = serialize($usuario); // Seta as variáveis email e senha e faz o tratamento prévio de caracteres $usuario->set_login($this->input->post('email'), 'Email e ou senha inválidos!'); $usuario->set_senha($this->input->post('senha'), 'Email e ou senha inválidos!'); //recebe pk redirecionada do qrCode $uriQrcode = $this->input->post('qrCode'); // Efetua o login $usuario = $usuario->loginUsuario(0, 0, 0, $data['ano_letivo'], $_SERVER['REMOTE_ADDR']); // Se o retorno for false if (!$usuario) { // incrementa a quantidade de erro $_SESSION['erroUsuarioSenha']['qtd'] += 1; // grava na base o hora da última tentativa fracassada assim como incremeta o número de tentativas frustradas $sqlUsuario = new SqlUsuario(); $sqlUsuario->log_erro_login($this->input->post('email'), $this->input->post('senha')); // envia a mensagem de erro $this->session->set_flashdata('msg', '<div class="alert erro">Email e/ou senha incorretos! Lembramos que o sistema diferencia maiúsculas e minúsculas. Se prefefir redefinir sua senha, <a class="link" href="' . base_url() . 'usuario/login_w/lembrete">clique aqui</a></div>'); // Redireciona para a página de login e aborta a operação header('location:' . base_url() . 'usuario/login_w/index/' . $uriQrcode); exit; } // Se não houver abortamento no passo anterior, prossegue com a serialização do objeto $usuario $_SESSION['usuario'] = serialize($usuario); $_SESSION['qrCode'] = $uriQrcode; // reseta um eventual erro anterior unset($_SESSION['erroUsuarioSenha']); // redireciona para a página home da área restrita header('location:' . base_url() . 'extranet/home/index/' . $uriQrcode); exit; } catch (Exception $e) { // grava na base o hora da última tentativa fracassada assim como incremeta o número de tentativas frustradas $sqlUsuario = new SqlUsuario(); $sqlUsuario->log_erro_login($this->input->post('email'), $this->input->post('senha')); echo $this->session->set_flashdata('msg', $e->getMessage()); redirect('usuario/login_w'); exit; } } }