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)
10
respostas

Erro ao utilizar o 'password_hash()'

Boa tarde

Não consegui utilizar a função 'password_hash()', está gerando o seguinte erro no terminal:

php > echo password_hash('123456', PASSWORD_ARGON2I);

Warning: password_hash() expects parameter 2 to be integer, string given in php shell code on line 1
10 respostas

Leonardo, boa tarde!

Qual versão você está utilizando, pelas minhas pesquisas parece ser um erro com a versão do PHP, e que foi corrigida na versão 7.3 a correção nesse caso é atualizar o seu PHP.

Espero ter ajudado e bons estudos!

Estou usando a versão 7.3.8:

MacBook-Air-de-Leonardo:~ leonardomorita$ php --version
PHP 7.3.8 (cli) (built: Aug 11 2019 20:50:16) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.8, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans
MacBook-Air-de-Leonardo:~ leonardomorita$ 

Fala, Leonardo.

Cara, eu nunca instalei PHP no Mac, então confere se ele vem com argon habilitado, pfv:

php -i | grep argon

Na saída desse comando, me informa se aparece --with-password-argon2. Se não aparecer, o problema é esse. O PHP foi instalado sem esse suporte. Nesse caso, tenta utilizar PASSWORD_DEFAULT como esse segundo parâmetro.

Olá Vinicius

Executei este comando que você me pediu, e realmente não apareceu nada

MacBook-Air-de-Leonardo:~ leonardomorita$ php -i | grep argon
MacBook-Air-de-Leonardo:~ leonardomorita$ 

Utilizei o 'PASSWORD_DEFAULT' e gerou isso de saída:

php > echo password_hash('123456', PASSWORD_DEFAULT);
$2y$10$/P5BLo7EEn6SZCbuTht7Qe/EXfhC46wQE0X/7Dc9903ShBxF5uNtu
php > 

Realizei a inserção do um usuário com essa senha:

MacBook-Air-de-Leonardo:projeto leonardomorita$ vendor/bin/doctrine dbal:run-sql "INSERT INTO usuarios (email, senha) VALUES ('leonardo@gmail.com', '$2y$10$/P5BLo7EEn6SZCbuTht7Qe/EXfhC46wQE0X/7Dc9903ShBxF5uNtu');"

/Volumes/Seagate/arquivos/cursos/alura/mvc/projeto/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Dumper.php:68:int 1
MacBook-Air-de-Leonardo:projeto leonardomorita$ 

Porém, quando fui verificar os registros da tabela 'usuarios', verifiquei que a senha não foi gravada exatamente igual:

MacBook-Air-de-Leonardo:projeto leonardomorita$ vendor/bin/doctrine dbal:run-sql "SELECT * FROM usuarios;"

/Volumes/Seagate/arquivos/cursos/alura/mvc/projeto/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Dumper.php:68:
array (size=1)
  0 => 
    array (size=3)
      'id' => string '9' (length=1)
      'email' => string 'leonardo@gmail.com' (length=18)
      'senha' => string 'y0$/P5BLo7EEn6SZCbuTht7Qe/EXfhC46wQE0X/7Dc9903ShBxF5uNtu' (length=56)
MacBook-Air-de-Leonardo:projeto leonardomorita$ 

E com isso, não consigo fazer o login, mesmo inserindo a senha correta do usuário. O que pode ser a causa do erro?

Show de bola, Leonardo. Cada vez que você executar password_hash ele vai gerar um hash diferente mesmo. Isso é esperado.

Se você não conseguir se logar, o erro é outro. O password_verify vai saber analisar a senha.

Boa noite

Consegui resolver o erro do login do projeto, utilizando o sistema operacional Windows 10. Com o MacOs, não consegui encontrar o erro, mesmo utilizando o projeto que o próprio professor Vinicius realizou nas aulas, não esta rodando corretamente.

Ainda não consegui entender a causa do erro.

Fala, Leonardo. Qual é o erro exibido agora? Explica com detalhes o que acontece, por favor?

Oi Vinicius. Então, o erro é o mesmo:

php > echo password_hash('123456', PASSWORD_ARGON2I);

Warning: password_hash() expects parameter 2 to be integer, string given in php shell code on line 1

Testando o mesmo projeto no Windows, funcionou corretamente.

Mas, Leonardo. Eu comentei para você utilizar PASSWORD_DEFAULT ao invés do argon.

solução!

Opa, copiei a mensagem de erro do terminal errado. Desculpe pelo desentendimento.

Mas, eu consegui resolver o erro apenas reinstalando o php.