在 Phabricator 中更改用户的密码

tac*_*ach 6 change-password phabricator

假设我在 Phabricator 中有一个用户,我需要更改他的密码(例如,电子邮件系统出现故障,我需要立即设置密码)。

我怎样才能做到这一点?

小智 5

自己也遇到了同样的情况,你可以在phabricator中执行一个脚本来恢复一个用户帐户。

bin/auth recover $USERNAME

执行后,控制台会打印一个recover URL,可用于为用户重置新密码。

相关信息:https : //secure.phabricator.com/D18901


tac*_*ach 1

似乎 Phabricator 维护者出于某种原因认为管理员不应该拥有对用户管理的完全访问权限,并且不提供用于此类任务的工具(例如/sf/answers/1487431361/)。一种选择是直接破解数据库,另一种方法是将功能添加到之前具有此功能的 account_admin.php 工具中(https://secure.phabricator.com/D18901?id=45357)。

我提交了该脚本的补丁,它再次添​​加了该功能。我并不是想对 Phabricator 代码库做 PR,我不相信它会被接受。

From 3340df50268d612c16ac17f48f69a9952688f47e Mon Sep 17 00:00:00 2001
From: root <user@localhost>
Date: Sun, 23 Jun 2019 02:44:24 +0200
Subject: [PATCH] Added possibility of changing passwords

---
 scripts/user/account_admin.php | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/scripts/user/account_admin.php b/scripts/user/account_admin.php
index 4e4500a2f..d5aa5f76e 100755
--- a/scripts/user/account_admin.php
+++ b/scripts/user/account_admin.php
@@ -112,6 +112,18 @@ if ($is_new) {
   $create_email = $email;
 }
 
+$changed_pass = false;
+// This disables local echo, so the user's password is not shown as they type
+// it.
+phutil_passthru('stty -echo');
+$password = phutil_console_prompt(
+  pht('Enter a password for this user [blank to leave unchanged]:'));
+phutil_passthru('stty echo');
+if (strlen($password)) {
+  $changed_pass = $password;
+}
+
+
 $is_system_agent = $user->getIsSystemAgent();
 $set_system_agent = phutil_console_confirm(
   pht('Is this user a bot?'),
@@ -148,6 +160,11 @@ if ($is_new) {
   printf($tpl, pht('Email'), '', $create_email);
 }
 
+printf($tpl, pht('Password'), null,
+  ($changed_pass !== false)
+    ? pht('Updated')
+    : pht('Unchanged'));
+
 printf(
   $tpl,
   pht('Bot'),
@@ -200,6 +217,17 @@ $user->openTransaction();
     $editor->updateUser($user, $verify_email);
   }
 
+  if ($changed_pass !== false) {
+    $password_envelope = new PhutilOpaqueEnvelope($changed_pass);
+
+    $account_type = PhabricatorAuthPassword::PASSWORD_TYPE_ACCOUNT;
+    $password_object = PhabricatorAuthPassword::initializeNewPassword($user, $account_type);
+
+    $password_object
+      ->setPassword($password_envelope, $user)
+      ->save();
+  }
+
   $editor->makeSystemAgentUser($user, $set_system_agent);
 
   $xactions = array();
@@ -223,6 +251,7 @@ $user->openTransaction();
 
   $transaction_editor->applyTransactions($user, $xactions);
 
+
 $user->saveTransaction();
 
 echo pht('Saved changes.')."\n";
-- 
2.20.1
Run Code Online (Sandbox Code Playgroud)