Yii2用户Dektrium-如何散列密码

Yii2用户Dektrium-如何散列密码,yii2,yii2-extension,Yii2,Yii2 Extension,我想对密码进行散列,并用数据库检查(密码\u散列) 我该怎么做 $username = $auth['username']; 我的密码是 $password = $auth['password']; 我想知道: $find = \dektrium\user\models\User::findOne(['username' => $username, 'password_hash' => $password]); 您可以使用 $hash = Yii::$app

我想对密码进行散列,并用数据库检查(密码\u散列) 我该怎么做

        $username = $auth['username'];
我的密码是

 $password = $auth['password'];
我想知道:

 $find = \dektrium\user\models\User::findOne(['username' => $username, 'password_hash' => $password]);

您可以使用

$hash = Yii::$app->getSecurity()->generatePasswordHash($password);


$find = \dektrium\user\models\User::findOne(['username' => $username, 
      'password_hash' => $hash]);
下面的代码来自dektrium/yii2 user/helpers/password.php(dektrium adn的hash函数..的代码,您可以看到扩展使用generatePasswordHash和一个cost

public static function hash($password)
{
    return \Yii::$app->security->generatePasswordHash($password,
      \Yii::$app->getModule('user')->cost);
}

默认成本=8

我知道回答这个问题已经很晚了,但对于那些仍在寻找的人来说..我最近遇到了这个问题,经过大量测试,下面的代码对我有效:

$behaviors['authenticator'] = [
        'class' => HttpBasicAuth::className(),
        'auth' => function ($username, $password) {
            $user = \dektrium\user\models\User::findOne(['username' => $username]);
            if ($user->validate($password)) {
                return $user;
            }
            return null;
        }
    ];

这不是真的!这个插件使用另一种方式来散列密码@ScaisEdge@Saltern.dektrium Yi2用户是na扩展..(不是插件)…答案更新了一个简短的建议…希望很清楚..对你来说…成本每次都在变化吗?因为我用这种方式散列密码,这不起作用,我不知道你是否有另一个成本..分配..(但不应该每次都改变..应该是固定的..)和\Yii::$app->getModule('user'))->cost应该返回您的本地成本..分配OK…谢谢..然后您必须使用此技术进行筛选..用户。我理解..但是我希望我的建议可能有用你好,欢迎使用stackoverflow。您可以添加一些关于这是如何解决问题的好答案的详细信息,而不是仅仅说它解决了问题吗问题