From 5e6e3953a0b151b0f472fa2f08307be2f6ec3b25 Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 8 Jun 2026 23:01:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=90=8E=E5=8F=B0=E7=AE=A1=E7=90=86=E5=91=98=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/ResetAdminPasswordCommand.php | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 app/Console/Commands/ResetAdminPasswordCommand.php diff --git a/app/Console/Commands/ResetAdminPasswordCommand.php b/app/Console/Commands/ResetAdminPasswordCommand.php new file mode 100644 index 0000000..a9cc9b3 --- /dev/null +++ b/app/Console/Commands/ResetAdminPasswordCommand.php @@ -0,0 +1,97 @@ +argument('username')); + if ($username === '') { + $this->error('用户名不能为空。'); + + return self::FAILURE; + } + + $admin = AdminUser::query()->where('username', $username)->first(); + if (! $admin) { + $this->error("未找到后台管理员账号:{$username}"); + + return self::FAILURE; + } + + $password = $this->resolvePassword(); + if ($password === null) { + return self::FAILURE; + } + + if (! $this->option('yes')) { + $name = $admin->name !== '' ? "({$admin->name})" : ''; + if (! $this->confirm("确认修改后台管理员 {$admin->username}{$name} 的密码?", false)) { + $this->warn('已取消修改。'); + + return self::FAILURE; + } + } + + $admin->forceFill([ + 'password_hash' => $password, + ])->save(); + + $this->info("后台管理员 {$admin->username} 的密码已更新。"); + + return self::SUCCESS; + } + + private function resolvePassword(): ?string + { + $password = $this->option('password'); + + if ($password !== null) { + $password = (string) $password; + + return $this->validatePassword($password) ? $password : null; + } + + $password = (string) $this->secret('请输入新密码'); + if (! $this->validatePassword($password)) { + return null; + } + + $confirmation = (string) $this->secret('请再次输入新密码'); + if ($password !== $confirmation) { + $this->error('两次输入的密码不一致。'); + + return null; + } + + return $password; + } + + private function validatePassword(string $password): bool + { + if (mb_strlen($password) < 6) { + $this->error('密码长度不能少于 6 个字符。'); + + return false; + } + + if (mb_strlen($password) > 255) { + $this->error('密码长度不能超过 255 个字符。'); + + return false; + } + + return true; + } +}