Trouvé le problème. quand j'ai fait ça :
echo strlen($hash)
il a imprimé 90, ce qui est étrange car il n'y avait définitivement aucun espace à la fin lorsque j'ai imprimé le message de réussite/échec, et le champ a une longueur varchar de 255
J'ai ajouté cette ligne :
$hash = substr( $hash, 0, 60 );
Et maintenant ça marche bien.
C'est étrange que personne d'autre ne semble avoir rencontré ce problème. Il existe des messages similaires sur password_verify, mais aucun d'entre eux n'a nécessité ce type de conversion, ni aucune conversion d'ailleurs :
php password_verify ne fonctionne pas
password_verify php ne correspond pas
http://forums.phpfreaks.com/topic/ 283407-besoin-d'aide-avec-password-verify/
Utiliser les fonctions password_hash et password_verify de PHP 5.5
Une chose qui me dérange, c'est que cela empêche le code d'être compatible. Comment saurai-je que le hachage comporte 60 caractères lorsque la valeur par défaut change ?