3
respostas

Não consigo fazer o login

Olá,

Seguindo os passos da aula, ainda não estou conseguindo fazer o login. Mesmo digitando a senha correta, o código não passa dessa parte:

        $usuario = $this->repositorioDeUsuarios
            ->findOneBy(['email'=>$email]);

        if (is_null($usuario) || !$usuario->senhaEstaCorreta($senha)) {
            echo "E-mail ou senha inválidos";
            return;
        }

Quando retiro essa parte, o sistema faz o redirecionamento para a página /listar-cursos normalmente.

Para verificar, mudei a senha do usuário de id 1 para '123456', para ficar mais simples de verificar. Quando dou o SELECT no banco de dados, retorna a tabela id =1 email = 'email@email.com.br' senha = '123456'. Mas ao inserir estes dados, o sistema retorna como e-mail ou senha inválidos.

A classe RealizarLogin está da seguinte forma:

<?php

namespace Alura\Cursos\Controller;

use Alura\Cursos\Entity\Usuario;
use Alura\Cursos\Infra\EntityManagerCreator;
use Doctrine\Common\Persistence\ObjectRepository;

class RealizarLogin implements InterfaceControladorRequisicao
{
    /**
     * @var ObjectRepository
     */
    private $repositorioDeUsuarios;

    public function __construct()
    {
        $entityManager = (new EntityManagerCreator())->getEntityManager();
        $this->repositorioDeUsuarios = $entityManager->getRepository(Usuario::class);
    }


    public function processaRequisicao(): void
    {
        $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
        if(is_null($email || $email === false)){
            echo "O e-mail digitado não é um e-mail válido.";
            exit();
        }

        $senha = filter_input(INPUT_POST,
            'senha',
            FILTER_SANITIZE_STRING);

        /**
         * @var Usuario $usuario
         */
        $usuario = $this->repositorioDeUsuarios
            ->findOneBy(['email'=>$email]);

        if (is_null($usuario) || !$usuario->senhaEstaCorreta($senha)) {
            echo "E-mail ou senha inválidos";
            return;
        }

        header('Location: /listar-cursos');
    }
}
3 respostas

Boa tarde Lucas,

Essa senha não deveria estar criptografada no banco?

Sim, mas estava acontecendo o mesmo erro.

A senha é criptografada na aula através daquele comando executado no terminal durante a aula, correto? Então através dos métodos, a classe Usuario verifica se a senha digitada corresponde à criptografado por aquele método.

Comigo estava dando o mesmo erro reportado em alguns posts anteriores em que o terminal estava entendendo o $ como início de variável.

Então mudei manualmente com SQL a senha para a senha criptografada correta. E então o mesmo problema continuou acontecendo.

Para que eu pudesse testar melhor se aquela parte do código estava funcionando, alterei para uma senha mais simples, o '123456' mesmo.

Entendi,

Estranho estar acontecendo isso. Eu também tive o problema de dar insert na senha pelo terminal e acabei depois dando update pelo DB Browser for SQLite.

Dentro do método senhaEstaCorreta na classe Usuario você chegou a alterar alguma coisa?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software