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