Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

php password_verify() hash e pass não corresponderão


$2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT o hash tem apenas 50 de comprimento e é inválido/muito curto e, como eu disse, o MySQL falhará silenciosamente; relatório/verificação de erros não teria ajudado aqui.

O comprimento da coluna da senha deve ser 60 (255 é sugerido), então ela não foi armazenada corretamente originalmente.

Você precisará limpar sua coluna/ou tabela de senhas, aumentar o tamanho da coluna e começar de novo.

Referência:

Você também pode modificar sua consulta para ler como:
$con = new mysqli("xxx", "xxx", "xxx", "xxx");
if ($con->connect_error) {
    die('Connect Error (' . $con->connect_errno . ') '
            . $con->connect_error);
}

$query = "SELECT `pass` FROM `user` WHERE `email`='$emailLogin'";
$result = $con->query($query);

// error checking on the query
if (!$result) {
    echo "<p>There was an error in query: $query</p>";
    echo $con->error;
}

$row_hash = $result->fetch_array();
if (password_verify($passLogin, $row_hash['pass'])) {
    echo "Success!";
}

Editar:

Adicionando de um comentário que deixei no OP:

Sua função de verificação precisa ter uma conexão com seu banco de dados, é isso que eu sinto que está acontecendo aqui (escopo variável). Portanto, você precisará usar global $con; ou passe a conexão (variável) para sua função (o que é melhor na maioria dos casos).

Não sei se você está fazendo um "include" para a função e, se estiver, esse é o outro problema.

Ex.:function VUP($con, $check, $valid){ ou function VUP($check, $valid){ global $con; - Tente ambos. Use $result = mysqli_query($con, $query) or die(mysqli_error($con)); em vez do que você tem agora.