Yii2:如何手动添加用户[复制]

z5btuh9x  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(180)

此问题在此处已有答案

How to create user in database manually in Yii2?(2个答案)
三年前就关门了。
可以从数据库手动添加用户吗?我有一个在此框架中创建的项目,但客户端不记得管理员的访问代码,我已经尝试手动创建用户,但我不知道如何加密密码。

9avjhtql

9avjhtql1#

手动添加

是的,您也可以从数据库中手动添加用户,您所需要的只是加密的密码,您可以使用以下行生成该密码

echo Yii::$app->security->generatePasswordHash('Your_password');

现在,您可以将上面的行复制粘贴到现有视图文件中,然后复制输出字符串并将其保存为用户表password字段中的密码。

使用迁移

或者create a migration,并通过该迁移添加管理员用户以进行快速修复,您可以将以下迁移复制粘贴到您的migrations文件夹中,它应该位于basic-app的根目录或advance-appconsole/migrations的根目录。
注意:如果列名和/或表名与您的情况不同,请更改它们。我使用的是userprofile表名。

<?php
// @codingStandardsIgnoreStart

use yii\db\Migration;

/**
 * Class m180322_183353_add_admin_user
 */
class m180322_183353_add_admin_user extends Migration
{
    // @codingStandardsIgnoreEnd

    /**
     * Table name
     *
     * @var string
     */
    private $_user = "{{%user}}";

    /**
     * @var string
     */
    private $_profile = "{{%profile}}";

    /**
     * Runs for the migate/up command
     *
     * @return null
     */
    public function safeUp()
    {
        $time = time();
        $password_hash = Yii::$app->getSecurity()->generatePasswordHash('pass12345');
        $auth_key = Yii::$app->security->generateRandomString();
        $table = $this->_user;

        $sql = <<<SQL
        INSERT INTO {$table}
        (`username`, `email`,`password_hash`, `auth_key`, `created_at`, `updated_at`)
        VALUES
        ('admin', 'admin@yoursite.com',  '$password_hash', '$auth_key', {$time}, {$time})
SQL;
        Yii::$app->db->createCommand($sql)->execute();

        $id = Yii::$app->db->getLastInsertID();

        //add profile entry for admin
        $this->insert(
            $this->_profile,
            [
                'user_id' => $id,
                'name' => 'Administrator',
                'public_email' => 'admin@yoursite.com'
            ]
        );

    }

    /**
     * Runs for the migate/down command
     *
     * @return null
     */
    public function safeDown()
    {
        $table = $this->_user;
        $sql = <<<SQL
        SELECT id from {$table}
        where username='admin'
SQL;
        $id = Yii::$app->db->createCommand($sql)->execute();
        $this->delete($this->_user, ['username' => 'admin']);
        $this->delete($this->_profile, ['user_id' => $id]);
    }

}

现在,通过终端转到项目根目录,并运行以下命令

./yii migrate

它将显示如下内容

Yii Migration Tool (based on Yii v2.0.22)

Total 1 new migration to be applied:
        m180322_183353_add_admin_user

Apply the above migration? (yes|no) [no]:

键入yes并按回车键,如果一切顺利,它将在终端上显示输出,如下所示

Apply the above migration? (yes|no) [no]:yes

***applying m180322_183353_add_admin_user

    > insert into {{%profile}} ... done (time: 0.006s)

***applied m180322_183353_add_admin_user (time: 0.865s)

1 migration was applied.

Migrated up successfully.

现在,您可以使用以下凭据登录

username : admin
password: pass12345

如果您希望以后删除该用户,请在终端中键入以下内容,然后在迁移运行后删除该用户

./yii migrate/down 1

考虑到您在此之后未创建任何其他迁移,或者创建单独的迁移以删除用户。

vybvopom

vybvopom2#

在PHP 5.5+上,Yii 2使用password_hash()来生成密码哈希值。如果你想重置某人的密码,你可以从控制台生成新的哈希值:

php -r 'echo password_hash("my password", PASSWORD_DEFAULT), "\n";'

并在更新查询中使用生成的值。

相关问题