it-swarm-ko.tech

새로 (프로그래밍 방식으로 생성) 차단 된 사용자는 재설정시 액세스가 거부됩니다.

일부 사용자를 Drupal 프로그래밍 방식으로 blocked로 가져 오려고합니다. user_save 및 drupal_execute라는 두 가지 방법을 찾았습니다. 그러나 첫 번째 방법은 그렇지 않습니다. 다른 방법은 메일을 보내는 동안 비밀번호 재설정 링크가있는 알림 이메일을 보내지 만 링크를 클릭하면 접근 거부

새로 설치 한 두 가지 환경 (Ubuntu 및 Windows)에서 코드를 시도했습니다. 실제로 사용중인 코드는 다음과 같습니다.

// register a new user
$form_state['values']['name'] = 'username';
$form_state['values']['mail'] = '[email protected]';

// generate and assign password
$pass = user_password(8);
$form_state['values']['pass'] = array (
    'pass1' => $pass,
    'pass2' => $pass
);
$form_state['values']['status'] = 0; // add user as blocked
$form_state['values']['notify'] = 1; // send notification with reset link
$form_state['values']['op'] = t('Create new account');

// check if user it's not already imported
$sql = "SELECT uid FROM {users} WHERE name = '%s'";
$result = db_query($sql, $form_state['values']['name'] );
$data = db_result($result);
#print_r($data);
if (!$data) {  // if the user does not exist, add it
    drupal_execute('user_register', $form_state);
}

사용자가 차단 된 상태로 데이터베이스에 올바르게 추가되면 알림 이메일을 수신하지만 재설정 링크를 클릭하면 액세스 거부 됨 (그런데 두 번 나타납니다. 내 테마는 콘텐츠로 오류가 두 번 있습니다. 정말 불쾌한 버그 ... 이유를 모르십니까?)

두 번째 코드는 다음과 같습니다.

// user details
$users = array(
    'name' => 'username',
    'pass' => user_password(8),
    'mail' => '[email protected]',
    'access' => '0',
    'status' => 0,
    'notify' => 1,
    'timezone' => 7200,
    'init' => '[email protected]'
);

$sql = "SELECT uid FROM {users} WHERE name = '%s'";
$result = db_query( $sql, $users['name'] );
$data = db_result( $result );
#print_r($data);
if (!$data)
    user_save( NULL, $users, NULL );
}

이 방법을 사용하면 모든 것이 잘 작동하지만 사용자가 차단 되었기 때문에 이메일을받지 못합니다.

이것이 어려운 질문인지는 모르겠지만 (Drupal 전문가에게만 해당)), 어떤 도움을 주시면 감사하겠습니다.

감사합니다!

3
sergio

사용자가 등록 이메일의 링크를 클릭하여 주소를 확인하기를 원한다고 가정합니다 (사용자 설정에서 구성 가능).

이것이 기본 동작이므로 사용자에서 status = 1을 설정해야하며 0이면 로그인 링크가 작동하지 않습니다.

ser_register_submit () 보면 이메일을 보내는 코드가 있습니다.

나는 당신이 원하는 것 같아요

$account =  user_save( NULL, $users, NULL );
if($account) {
  _user_mail_notify('register_admin_created', $account);
}
else {
// Error code
}

두 번째 방법이 끝날 때.

2
Jeremy French

최종 코드는 다음과 같습니다.

// setup the details
$password = user_password(8);

$user = array(
    'name' => 'username',
    'pass' => $password, // field to save in the database
    'password' => $password, // required to send in notification mail
    'mail' => '[email protected]',
    'access' => '0',
    'status' => 1,
    'timezone' => 0,
    'init' => '[email protected]'
);

$sql = "SELECT uid FROM {users} WHERE name = '%s'";
$result = db_query( $sql, $user['name'] );
$data = db_result( $result );
#print_r($data);
if (!$data) {  // if the user does not exist
    $account = user_save( NULL, $user, NULL );

    // send notification
    if ($account) {
        // add profile fields
        $profile = array('profile_field' => 'Value');
        profile_save_profile($profile, $account, 'Profile Category');

        _user_mail_notify('register_admin_created', $account);
    }
}
1
sergio

사용자 관리 권한이있는 사용자 만 차단 된 계정과 연결된 페이지에 액세스 할 수 있습니다.

이메일을받은 사용자에게 링크가 연결된 페이지에 액세스 할 수 있도록 허용하려면 로그인하기 전과 같이 익명 사용자에게 사용자 관리 권한을 부여해야합니다. 링크를 따르는 사용자는 익명입니다. 사용자. 이것은 권장되지 않으므로 링크를받은 사람이 링크 된 페이지에 액세스 할 수 있도록하려면 활성화 된 상태에서 사용자 계정을 만들어야합니다.

결국 사용자 암호가 코드에서 설정되었으므로 아무도 암호를 알지 못합니다 (너무 쉬운 암호를 설정하지 않으면). 차단 된 계정을 사용해야하는 사용자는 차단되면 사용할 수 없다는 점을 감안하면 차단 된 계정을 만드는 것은 전혀 쓸모가 없습니다.

0
kiamlaluno