Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Meu código quebrou. Sempre na tela de login e sempre invalido

Boa tarde pessoal. Vejam se consegue me dar uma ajuda: Meu código está quebrado. Sempre coloco o login e senha correto, correto mesmo. Criei até outro usuario com senha numerica mesmo, sem criptografar ela. Mas ainda sim não sai da tela de login. A mensagem é sempre de login inválido. Terminei o curso mas voltei aqui pra tentar ver onde estou errando e não acho. O que fiz foi comentar esse trecho do index.php que faz a verificação de login. E então as telas de listar cursos, exluir, novo curso funcionam. /* $ehRotaDeLogin = stripos($caminho, 'login'); if (!isset($_SESSION['logado']) && $ehRotaDeLogin === false) { header('Location: /login'); exit(); } */ O que pode ser?

3 respostas

Teria que dar uma olhada no codigo que faz o login na sua aplicação. Talvez quando vc efetua o login por algum motivo não estava salvando na $_session['logado], então apesar de vc estar com a senha e loguin correto não consegue acessar as paginas.

//Segue o codigo da classe RealizarLogin

<?php

namespace Alura\Cursos\Controller;

use Alura\Cursos\Entity\Usuario;
use Alura\Cursos\Helper\FlashMessageTrait;
use Doctrine\ORM\EntityManagerInterface;
use Nyholm\Psr7\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

class RealizarLogin implements RequestHandlerInterface
{
    use FlashMessageTrait;

    /**
     * @var \Doctrine\Common\Persistence\ObjectRepository
     */
    private $repositorioDeUsuarios;

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

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $email = filter_var(
            $request->getParsedBody()['email'],
            FILTER_VALIDATE_EMAIL
        );

        $redirecionamentoLogin = new Response(302, ['Location' => '/login']);
        if (is_null($email) || $email === false) {
            $this->defineMensagem(
                'danger',
                'O e-mail digitado não é um e-mail válido.'
            );

            return $redirecionamentoLogin;
        }

        $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)) {
            $this->defineMensagem('danger', 'E-mail ou senha inválidos');

            return $redirecionamentoLogin;
        }

        $_SESSION['logado'] = true;

        return new Response(302, ['Location' => '/listar-cursos']);
    }
}

//Segue classe FormularioLogin

<?php

namespace Alura\Cursos\Controller;

use Alura\Cursos\Helper\RenderizadorDeHtmlTrait;
use Nyholm\Psr7\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

class FormularioLogin implements RequestHandlerInterface
{
    use RenderizadorDeHtmlTrait;

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $html = $this->renderizaHtml('login/formulario.php', [
            'titulo' => 'Login'
        ]);

        return new Response(200, [], $html);
    }
}
solução!

Após inumeras tentativas, eu substitui o database.sqlite do projeto final pelo que eu tinha e consegui testar logando com usuario do instrutor vinicius e depois eu criei novamente meu usuario e senha. E funcionou. Funfou!! Vlw Galera.