管理者はパスワードなしで新しいアカウントを作成できますか?


10

管理者が新しいアカウント(admin / people / create)を作成すると、アカウントのパスワードを入力するように求められます。クライアントは、バックエンドでアカウントが作成されたときに管理者がパスワードを入力する必要がないことを望んでいますが、ユーザーには1回限りのログインリンクを含む通知メッセージが送信され、それを使用してログインした後のパスワード。このようなことを達成するための最良の方法は何ですか?

フォームを変更し#default_valueてパスワードフィールドをランダムなパスワードに設定してからを設定することを考えたことがありますが、それ'#access' => FALSEが最善の方法かどうかはわかりません。

回答:


3

これを行うモジュールがあります。

パスワードの生成を確認してください。

この追加設定は、[ 設定]»[ユーザー]»[アカウント設定]に導入されています

ユーザーは登録時にパスワードを入力できます。空のままにすると、ランダムなパスワードが生成されます。これは、管理者がアカウントを作成するときに常に適用されます。

次に、アカウントを作成するときは、パスワードフィールドを空のままにしますが、[ユーザーの追加]ページでこのチェックボックスもオンにしてください。

新しいアカウントをユーザーに通知する

これら2つの設定の結果、管理者がアカウントを作成するとモジュールがランダムなパスワードを生成し、ユーザーにアカウントに関する通知がメールで送信され、含まれているワンタイムログインリンクにパスワードを設定するように求められます。通知で。

それがどのように行われるかを知りたい場合は、ソースコードを読んでください。


2
このモジュールの最初のコード行は、すべてのページの読み込みで使用hook_init()drupal_add_css()れています...コアの複製もしていますuser_password()。においテストに合格しません。
Garrett Albright

同意し、@ GarrettAlbright — GenPassを改善(および簡略化)するか、新しいモジュールを作成することは理にかなっていると思いますか、それとも既存の管理エクスペリエンスモジュールに適合させますか?
mlncn 2014

管理者はこれをどのくらいの頻度で行う必要がありますか?私の場合、それは次のようなものです。隔月。これは、GenPassが非常に最適化されていなくても生活できることを意味します。常にこれを行っている場合は、GenPassの改善や、より優れたモジュールの作成に時間をかけることができます。
フリーラジカル

詳細を思い出すことはできませんが、IIRCではOPで言及したアプローチを採用しました。パスワードフィールドをuser_password(mt_rand(10, 50))非表示にして、フォームの送信時にランダムに使用するなどを設定します。
Garrett Albright 2014

すべてのページの読み込みにCSSを追加する場合、@ FreeRadicalを使用すると、機能をどの程度使用しても問題はありません。サービスが提供されるすべてのページの速度が低下します
AdamS

3

「Generate Password」モジュールのインストールを気に入らず、フックの使用に慣れている場合は、次の方法を使用できます。

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Remove the password field when admin is creating an account.
 */
function HOOK_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  if ($form['administer_users']['#value']) {
    $form['account']['pass']['#access'] = FALSE;
    $form['account']['pass']['#value']['pass1'] = user_password();
    $form['account']['pass']['#value']['pass2'] = $form['account']['pass']['#value']['pass1'];
  }
}

あなたの好みに合わせてもっと洗練させることができます。現状では、常にパスワードフィールドを非表示にし、代わりに値を提供します。管理者は、新しいアカウントを編集して特定の値を設定する必要があります。また、「通知」のデフォルトをオフのままにしますが、オンにすることもできます。

@joe_flashの回答に従って更新(ただし、若干コンパクトな形式):要素が処理されるときに、パスワードフィールドは2つのサブフィールド(「pass1」と「pass2」)に展開されます。


1

AdamSの答えはほとんどありません。要素が処理されると(form_process_password_confirm())、パスワードフィールドは2つのサブフィールド(「pass1」と「pass2」)に展開されるため、次のようなものが必要です。

/**
 * Implements hook_form_FORM_ID_alter().
 */
function acfo_common_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  // Do special for user admins.
  if ($form['administer_users']['#value']) {
    // Default to sending user an account creation notification.
    $form['account']['notify']['#default_value'] = 1;

    // We'll send a one-time login link in lieu of setting a password here.
    $pass = user_password();
    $form['account']['pass']['#value'] = array(
      'pass1' => $pass,
      'pass2' => $pass,
    );
    $form['account']['pass']['#access'] = FALSE;
  }
}

おかげで私は私の答えを更新しました(そしてあなたに信用を与えました!)。私は自分のサーバーにすでに動作しているコードを持っていますが、誤って古いバージョンを回答にコピーしたに違いありません。
AdamS 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.