Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

[Dúvida] Login

Tive que comentar o trecho do código para prosseguir com o curso, pois nada resolveu.

Sempre caio em "email ou senha incorretos" fiz tudo que o professor Vinicius sugeriu nos tópicos semelhantes.

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

O problema provavelmente é no sqli, mas não encontrei nenhuma solução no fórum... Obs. Tentei tudo.

12 respostas

Verifique o usuário

var_dump($usuario);

Olá, Luiz. Tudo bem?

Você poderia me enviar o código do seu projeto para eu poder analisar?

Pode ser link do repositório no Github ou você pode zipar o código e anexar no drive para que eu possa te auxiliar de uma maneira mais assertiva

Fico no aguardo. Bons estudos =)

Opa, bom dia!

Segue link: https://github.com/DevLuizFernando/gerenciado-de-cursos

Olá, Luiz.

Muito obrigado por me disponibilizar seu código =)

Você só esqueceu de enviar o arquivo db.sqlite, verifica se você tem este arquivo. Eu fiz os testes com o banco usado na aula e funcionou.

Você já verificou se está digitando o e-mail e senha corretamente?

Tenta seguir esse passo a passo:

  • 1º Abra o terminal na pasta do projeto e digite o seguinte comando para inserir o usuário no banco de dados:
vendor\bin\doctrine dbal:run-sql "INSERT INTO usuarios (email, senha) VALUES ('luiz@alura.com.br', '$argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o');"

Obs: Quando for se logar você tenta:

  • Email: luiz@alura.com.br
  • Senha: 123456
  • Descomenta a linha abaixo, pois é ela que verifica se as credenciais estão corretas:
        if (is_null($usuario) || !$usuario->senhaEstaCorreta($senha)) {
            $_SESSION['tipo_mensagem'] = 'danger';
            $_SESSION['mensagem'] = "E-mail ou senha inválidos";
            header('Location: /login');
            return;
        }
  • 3: Suba o servidor local do PHP e abra na rota /login e tente fazer o login

Verifica se deu certo =)

Boa tarde, Vinicius!

Tenho o arquivo sqlite sim. O problema segue "email ou senha incorretos."

Detalhe, os dados estão sendo inseridos no db normalmente.

vendor\bin\doctrine dbal:run-sql "INSERT INTO usuarios (email, senha) VALUES ('luiz@alura.com.br', '$argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o');" [Warning] The use of this script is discouraged. See https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html#doctrine-console for instructions on bootstrapping the console runner.

[OK] 1 rows affected.

Luiz, provavelmente os dados estão sendo salvos incorretamente no bando de dados.

Abra o terminal na pasta do projeto e digite:

vendor\bin\doctrine dbal:run-sql "SELECT * FROM usuarios"

Este comando irá retornar todos os dados da tabela usuarios, feito isso, verifique se na coluna senha, a senha cadastrada corresponde a que você cadastrou através do seguinte comando:

vendor\bin\doctrine dbal:run-sql "INSERT INTO usuarios (email, senha) VALUES ('luiz@alura.com.br', '$argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o');"

Se não corresponder, pode ser que o terminal que esteja usando está interpretando $ como variável ou alguma outra coisa. Tenta mudar o terminal e faça a inserção novamente.

Eu estou usando o Windows, então fiz o cadastro pelo Prompt de Comando e deu certo, entretanto quando fui fazer pelo PowerShell não deu certo e a senha cadastrada foi diferente

Oi, Vinicius.

O problema não é esse.

Fiz tudo, pela ide e pelo cmd, tentei com os dois terminais...

C:\Users\User\Desktop\projetos php\gerenciador-de-cursos>vendor\bin\doctrine dbal:run-sql "SELECT * FROM usuarios"
[Warning] The use of this script is discouraged. See https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html#doctrine-console for instructions on bootstrapping the console runner.


 ---- ----------------------- -------------------------------------------------------------------------------------------------
  id   email                   senha
 ---- ----------------------- -------------------------------------------------------------------------------------------------
  1    vinicius@alura.com.br   $argon2i$v=19$m=1024,t=2,p=2$aGNOdlNGV1NxQ3hQM2l5aA$8EE+cr140pNppUtFWDJtvU/TtdivGu+u+KftlvvEfpw
  2    luiz@fernando.com       123456
  3    luiz@fernando.com       123456
  4    luiz@alura.com.br       =19=1024,t=2,p=2/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o
 ---- ----------------------- -------------------------------------------------------------------------------------------------


C:\Users\User\Desktop\projetos php\gerenciador-de-cursos>vendor\bin\doctrine dbal:run-sql "INSERT INTO usuarios (email, senha) VALUES ('luiz@alura.com.br', '$argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o');"
[Warning] The use of this script is discouraged. See https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html#doctrine-console for instructions on bootstrapping the console runner.




 [OK] 1 rows affected.

Como pode observar, os dados estão sendo inseridos corretamente, tanto que tentei criar user sem criptografia, e nada...

Os dados estão sendo inseridos, mas não corretamente, repare na linha 4:

  4    luiz@alura.com.br       =19=1024,t=2,p=2/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o

A senha deveria ser:

$argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o

Veja que onde tem $ foi sendo retirado muitos caracteres.

A validação só irá funcionar se toda a string for cadastrada no banco de dados.

Tenta baixar o Windows Terminal você encontra ele na Microsoft Store.

Usa ele e faça novamente o cadastro da linha abaixo:

vendor\bin\doctrine dbal:run-sql "INSERT INTO usuarios (email, senha) VALUES ('luiz@alura.com.br', '$argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o');"

Vinicius, não é esse o problema, realmente a linha 4 estava incorreta, porém eu não tinha atualizado após fazer o processo que você sugeriu...

C:\Users\User>cd C:\Users\User\Desktop\projetos php\gerenciador-de-cursos

C:\Users\User\Desktop\projetos php\gerenciador-de-cursos>vendor\bin\doctrine dbal:run-sql "INSERT INTO usuarios (email, senha) VALUES ('luiz@alura.com.br', '$argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o');"
[Warning] The use of this script is discouraged. See https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html#doctrine-console for instructions on bootstrapping the console runner.




 [OK] 1 rows affected.



C:\Users\User\Desktop\projetos php\gerenciador-de-cursos>vendor\bin\doctrine dbal:run-sql "SELECT * FROM usuarios"
[Warning] The use of this script is discouraged. See https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html#doctrine-console for instructions on bootstrapping the console runner.


 ---- ----------------------- -------------------------------------------------------------------------------------------------
  id   email                   senha
 ---- ----------------------- -------------------------------------------------------------------------------------------------
  1    vinicius@alura.com.br   $argon2i$v=19$m=1024,t=2,p=2$aGNOdlNGV1NxQ3hQM2l5aA$8EE+cr140pNppUtFWDJtvU/TtdivGu+u+KftlvvEfpw
  2    luiz@fernando.com       123456
  3    luiz@fernando.com       123456
  4    luiz@alura.com.br       =19=1024,t=2,p=2/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o
  5    luiz@alura.com.br       $argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o
  6    luiz@alura.com.br       $argon2i$v=19$m=1024,t=2,p=2$NEJHU0NMZUptQnNHQTN2Mg$ai6vnv0KFL/S0RPF6NbOZZ3Urqe63xZBPNnbt54eV/o
 ---- ----------------------- -------------------------------------------------------------------------------------------------


C:\Users\User\Desktop\projetos php\gerenciador-de-cursos>

Como pode ver, nada da certo... Inclusive tentei logar com a criptografia, sem ela, e nada funciona.

solução!

Remova os registros 4 e 5, para isso rode os seguintes comandos:

vendor\bin\doctrine dbal:run-sql "DELETE FROM usuarios WHERE id = 4"
vendor\bin\doctrine dbal:run-sql "DELETE FROM usuarios WHERE id = 5"

Possui 3 e-mails iguais, tenta deixar apenas 1 e-mail. O doctrine deve está resgatando o registro da linha 4 e usando ele para comparar a senha

Ufaaaaa, boa cara! Finalmente deu certo.

Obrigado!

Boa, Luiz =)

Tmj, Bons estudos!