我刚安装了php 7.4并尝试以我的帐户访问,但出现错误。 有任何想法吗?
Notice: Core\Hash::needsRehash() Algorithm "" not supported.
我也尝试过不起作用
$algo = 'bcrypt';
$algo = 'argon2id';
功能
public static function needsRehash($hash, $algo = null)
{
if (!isset($algo) || $algo == 'default') {
$algo = PASSWORD_DEFAULT;
} elseif ($algo == 'bcrypt') {
$algo = PASSWORD_BCRYPT;
} elseif ($algo == 'argon2id') {
$algo = PASSWORD_ARGON2ID;
}
if (!is_int($algo)) {
trigger_error('Core\Hash::needsRehash() Algorithm "' . $algo . '" not supported.');
}
答案 0 :(得分:2)
您检查!isset($algo)
,这意味着如果传递空字符串,则验证将失败。在这种情况下,我认为使用!isset()
是不合适的,因为它总是设置的(除非它为null,但是您可以显式地对其进行测试)。
您可以检查empty($algo)
,或者参数是否等于null。检查empty()
不仅会检查空字符串和空值(请参阅下文)。
if (empty($algo) || $algo == 'default') {
// or
if ($algo === null || $algo == 'default') {
isset()
:
确定是否将变量视为集合,这意味着是否声明了变量并且该变量不同于NULL。
empty()
:
确定变量是否被认为是空的。如果变量不存在或其值等于FALSE,则将其视为空。如果变量不存在,则empty()不会生成警告。
答案 1 :(得分:2)
您正在检查$algo
是否为整数,但是在PHP 7.4中,这些常量不再是整数;它们是可为空的字符串。
来自PHP 7.4 Backward Incompatible Changes
密码哈希算法标识符现在是可为空的字符串,而不是 比整数。
- PASSWORD_DEFAULT为整数1;现在是NULL
- PASSWORD_BCRYPT为整数1;现在 是字符串“ 2y”
- PASSWORD_ARGON2I是int 2;现在是字符串“ argon2i”
- PASSWORD_ARGON2ID为int 3;现在是字符串'argon2id'
应用程序 正确使用常量PASSWORD_DEFAULT,PASSWORD_BCRYPT, PASSWORD_ARGON2I和PASSWORD_ARGON2ID将继续运行 正确。
您的代码未正确使用它们。您假设它们是整数,并且您明确检查了它们的值,但实际上您不需要这样做。在PHP7.4中,您可以使用password_algos()
来检查您的PHP安装中是否存在该算法。在以前的PHP版本中,您可以使用defined(PASSWORD_ARGON2I)
检查是否定义了算法。
为了向后兼容,也接受旧的整数值,但不应使用。只要坚持不变。