update user list

This commit is contained in:
2026-04-01 13:52:12 +08:00
parent 7c83fa4664
commit 6f7e2fb599
4 changed files with 377 additions and 0 deletions
@@ -0,0 +1,72 @@
<?php
declare(strict_types=1);
namespace App\Command;
use App\Model\User;
use Hyperf\Command\Annotation\Command;
use Hyperf\Command\Command as HyperfCommand;
use Psr\Container\ContainerInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
#[Command]
class UserResetPasswordCommand extends HyperfCommand
{
public function __construct(protected ContainerInterface $container)
{
parent::__construct('user:reset-password');
}
public function configure(): void
{
parent::configure();
$this->setDescription('Reset password for a specified user');
$this->addArgument('identifier', InputArgument::REQUIRED, 'Username or user ID');
$this->addOption('password', 'p', InputOption::VALUE_OPTIONAL, 'New password (min 6 characters). If omitted, will prompt interactively');
}
public function handle(): int
{
$identifier = $this->input->getArgument('identifier');
// 按 ID(纯数字)或 username 查找用户
$user = is_numeric($identifier)
? User::find((int) $identifier)
: User::query()->where('username', $identifier)->first();
if (! $user) {
$this->error(sprintf('User "%s" not found.', $identifier));
return 1;
}
// 获取密码:优先 --password 选项,否则交互式隐藏输入
$new_password = $this->input->getOption('password');
if ($new_password === null) {
$new_password = $this->secret('Enter new password');
if ($new_password === null) {
$this->error('Password cannot be empty.');
return 1;
}
}
// 密码长度校验(bcrypt 截断超过 72 字节的输入)
if (strlen($new_password) < 6) {
$this->error('Password must be at least 6 characters.');
return 1;
}
if (strlen($new_password) > 72) {
$this->error('Password must not exceed 72 characters (bcrypt limit).');
return 1;
}
// password mutator 自动调用 password_hash()
$user->password = $new_password;
$user->save();
$this->info(sprintf("Password for user '%s' has been reset.", $user->username));
return 0;
}
}