欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

通过 ldap_login 模块 可以得到绑定 Ad 用户登录的原理 获取 ldap 用户 信息 有大用 有大大用

下面是属于 ldap_login   module 里面的内容


function _ldap_login_validate_ldap_user($form, &$form_state) {
  // Get the LDAP configuration.    
  $options = _ldap_login_get_ldap_settings();

   
  // Make the LDAP connection.    
  try {
    $adldap = new adLDAP($options);
  }
  catch (adLDAPException $e) {
    // Throws an error to the user.    
    drupal_set_message(t('An error occurred while trying to log you in.'), 'error');

   
    // Logs the errors into the DB.    
    watchdog('ldap_login', $e, array(), WATCHDOG_NOTICE, 'error_login');
  }

   
  // User info from the form submission.    
  $user_name = $form_state['values']['name'];
  $user_pass = $form_state['values']['pass'];

   
  if (is_object($adldap)) {
    // Tries to authenticate the user.    
    $ldap_is_user = $adldap->authenticate($user_name, $user_pass);
  }

   
  // Checks if the user exists on LDAP. If not, jump to normal Drupal workflow.    
  // If the user exists, check if it's a Drupal user already. If not create.    
  if ($ldap_is_user) {
    // Get the user mail from the AD.    
    $ldap_user = $adldap->user()->infoCollection($user_name);

   
    // Check if the user is already a Drupal user.    
    // TODO: remove this mail creation once all the users from LDAP have the respective email.    
    $user_mail = isset($ldap_user->mail) ? $ldap_user->mail : rand('1', '1000') . '@drupalized.co';
    // $user_mail = !(empty($ldap_user->mail)) ? $ldap_user->mail : rand('1', '1000') . '@drupalized.co';    
    $field_full_name = isset($ldap_user->displayname) ? $ldap_user->displayname : '';
    // $field_full_name = !(empty($ldap_user->displayname)) ? $ldap_user->displayname : '';    

   
    //var_dump($ldap_user->mail);    
    //var_dump($ldap_user->displayname);    
    //var_dump($ldap_user);exit;    


   
    // Load the user.    
    $user = user_load_by_mail($user_mail);
    $user = !empty($user) ? $user : user_load_by_name($user_name);

   
    // If it is a Drupal user, update based on user account.    
    $user_account = (!empty($user) && isset($user->uid)) ? $user : '';

   
    $old_roles = _ldap_login_get_old_roles(trim($user_name));

   
    // Get the roles according to the ones mapped on the Drupal admin interface.    
    $drupal_user = array(
      'name'   => $user_name,
      'pass'   => $user_pass,
      'mail'   => $user_mail,
      'status' => 1,
      'init'   => $user_mail,
      'roles'  => !empty($old_roles)?$old_roles:_ldap_login_get_mapped_roles($ldap_user->memberOf),//原来有角色,就用原来的角色,否则用ldap映射的角色    
     
    );

   
    // Allow other modules to modify the user entity in case of custom fields.    
    if (count(module_implements('ldap_login_user_alter')) > 0) {
      // Call all modules that implement the hook,    
      // and let them make changes to $drupal_user.    
      $drupal_user = module_invoke_all('ldap_login_user_alter', $drupal_user);
    }

   
    // If the first parameter is sent blank, a new user is created.    
    // Otherwise, user is updated.    
    //var_dump($drupal_user);exit;    

   
    $user_account = user_save($user_account, $drupal_user);//这里要返回一个值$user_account,后面的user_save 才是更新,而不是新建    
    $user_account->field_full_name['und'][0]['value'] = $field_full_name;
    user_save($user_account);
  }
}


普通分类: