[英]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.