[英]How can I bcrypt a password during Yii2 Migrations?
我有个问题。 我有一个迁移文件,该文件将一个管理员用户和一个普通用户批量插入到数据库中。 现在我已经准备好文件并且它们工作正常。 但是,在 Yii1.1 中插入时,密码曾经是 md5 hash,如下所示: 'password'=>md5('admin')
我的问题是,我可以用 bcrypt 在 Yii2 中做类似的事情吗? 在创建过程中我在哪里加密密码? 我使用batchInsert('users', ['column1', 'column2'...], ['Jon', 'Doe'...], ['Jane', 'Doe'...])
任何帮助是极大的赞赏!
Yii2 中 hash 密码的正确方法是使用 yii yii\base\Security::generatePasswordHash()
。 此方法使用password_hash()
function 和PASSWORD_DEFAULT
常量作为算法。 我认为目前该常量仍然是指 bcrypt 算法。 但它意味着面向未来。 当 PHP 移动到另一种算法时,您无需更改代码。 如果password_hash()
function 不可用,则generatePasswordHash()
方法回退到crypt()
function。
在迁移中,您可以像在其他任何地方使用它们一样使用应用程序组件。 例如:
$this->batchInsert(
'users',
['first_name', 'last_name', 'password', ...],
[
['John', 'Doe', Yii::$app->security->generatePasswordHash('mySecretPassword'), ...],
['Jane', 'Doe', Yii::$app->security->generatePasswordHash('anotherPassword'), ...],
]
);
或者,如果您更喜欢依赖注入方法:
use yii\base\Security;
use yii\db\Migration;
class WhateverMigrationName extends Migration
{
private Security $security;
public function __construct(Security $security, $config = [])
{
parent::__construct($config);
$this->security = $security;
}
public function safeUp()
{
// ...
$this->batchInsert(
'users',
['first_name', 'last_name', 'password', ...],
[
['John', 'Doe', $this->security->generatePasswordHash('mySecretPassword'), ...],
['Jane', 'Doe', $this->security->generatePasswordHash('anotherPassword'), ...],
]
);
// ...
}
// ...
}
要针对由generatePasswordHash()
创建的 hash 验证密码,您可以以相同的方式调用yii\base\Security::validatePassword()
方法。 例如:
Yii::$app->security->validatePassword($password, $storedHash);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.