Solucionado (ver solução)
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!