簡體   English   中英

如何在 Yii2 遷移期間加密密碼?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM