检查哈希有效性

Check hash validity

我正在尝试根据数据库中存储的无效散列来验证密码。在这种情况下,我的应用程序没有得到 false(如我所想),而是死于 Invalid hash 异常。

有没有 Yii2 内置的方法来验证散列,然后再将其提供给 validatePassword,以更温和地处理这种情况?

或者我剩下的唯一方法是复制 validatePassword:

使用的代码
if (!preg_match('/^$2[axy]$(\d\d)$[\.\/0-9A-Za-z]{22}/', $hash, $matches) || $matches[1] < 4 || $matches[1] > 30) {
    throw new InvalidParamException('Hash is invalid.');
}

到我自己的代码,当散列无效时根本不调用 validatePassword

您始终可以在密码验证中使用 try - catch 块:

/**
 * Validates password
 *
 * @param  string $password password to validate
 * @return boolean if password provided is valid for current user
 */
public function validatePassword($password)
{
    try {
        $data = Yii::$app->getSecurity()->validatePassword($password, $this->password_hash);
        return $data;
    } catch(\yii\base\InvalidParamException $e) {
        return false;
    }
}

类似的东西,但是如果哈希已经是格式错误的,你为什么还要尝试验证它呢?也许一些罪犯会在那里传递一些不好的东西,可以通过你的登录等。