관리자가 비밀번호없이 새 계정을 만들 수 있습니까?


10

관리자가 새 계정 (admin / people / create)을 만들면 계정 암호를 입력하라는 메시지가 나타납니다. 내 고객은 백엔드에서 계정을 만들 때 관리자가 비밀번호를 입력하지 않아도되지만 사용자에게 일회성 로그인 링크가 포함 된 알림 메시지가 전송 된 후 그것을 사용하여 로그인 한 후 암호. 이와 같은 것을 달성하는 가장 좋은 방법은 무엇입니까?

#default_value암호 필드를 임의의 암호로 설정 한 다음 설정 하기 위해 양식을 변경하려고 생각 '#access' => FALSE했지만 이것이 최선의 방법인지 확실하지 않습니다.

답변:


3

이를 수행하는 모듈이 있습니다.

비밀번호 생성을 확인하십시오 .

구성»사람»계정 설정 에서이 추가 설정을 소개합니다 .

사용자는 등록시 비밀번호를 입력 할 수 있습니다. 비워두면 임의의 비밀번호가 생성됩니다. 이것은 관리자가 계정을 만들 때 항상 적용됩니다.

그런 다음 계정을 작성할 때 비밀번호 필드를 비워 두십시오. "사용자 추가"페이지에서이 확인란도 선택하십시오.

새 계정을 사용자에게 알림

이 두 가지 설정의 결과는 관리자가 계정을 만들 때 모듈이 임의의 암호를 생성하고 사용자에게 계정에 대한 알림이 포함 된 전자 메일을 보내고 포함 된 일회성 로그인 링크에서 암호를 설정하라는 메시지가 표시됩니다 알림에서.

수행 방법을 배우려면 소스 코드를 읽으십시오.


2
이 모듈의 첫 번째 코드 줄은 모든 페이지로드에서 사용 hook_init()하고 있습니다. 냄새 테스트를 통과하지 못합니다. drupal_add_css()user_password()
개렛 올브라이트

@GarrettAlbright에 동의합니다. GenPass를 개선 (및 단순화)하거나 새로운 모듈을 만들거나 기존 관리자 경험 모듈에 맞추는 것이 합리적이라고 생각하십니까?
mlncn

관리자는이 작업을 얼마나 자주 수행해야합니까? 제 경우에는 다음과 같습니다. 격월로. 이것은 내가 최적화되지 않은 GenPass와 함께 살 수 있음을 의미합니다. 이 작업을 항상 수행하는 경우 GenPass를 개선하거나 더 나은 모듈을 작성하는 데 시간을 할애 할 수 있습니다.
Free Radical

구체적인 내용은 기억 나지 않지만 IIRC는 방금 OP에서 언급 한 접근 방식을 취했습니다. 암호 필드를 숨기고 user_password(mt_rand(10, 50))양식 제출시 임의로 사용 하거나 이와 유사한 것을 설정하십시오 .
Garrett Albright

@FreeRadical이 모든 페이지로드에 CSS를 추가하는 경우, 기능을 얼마나 자주 사용하는지는 중요하지 않습니다. 제공되는 모든 단일 페이지가 느려질 것입니다.
AdamS

3

"비밀번호 생성"모듈을 설치하지 않고 후크를 사용하는 것이 편한 경우 다음 대안이 있습니다.

/**
 * 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 답변에 따라 업데이트되었지만 (좀 더 간결한 형식으로) : 요소가 처리 될 때 비밀번호 필드가 두 개의 서브 필드 ( "pass1"및 "pass2")로 확장됩니다.


1

AdamS의 답변이 거의 있습니다. 요소가 처리 될 때 비밀번호 필드가 두 개의 서브 필드 ( "pass1"및 "pass2")로 확장되므로 ( form_process_password_confirm()) 다음과 같은 것이 필요합니다.

/**
 * 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.