Загрузка пользователей из Active Directory в базу данных Active Record Rails 3.1

StackOverflow https://stackoverflow.com/questions/8319414

Вопрос

Обновление 30.11.11 Я внес несколько изменений в фрагменте кода, где я нашел ошибки. Теперь я наверняка успешно аутентифицирую, но получаю эту ошибку после попытки LDAP.Search Call:

<OpenStruct code = 1, message="Operations Error">

Использование Rails 3.1.0 и Ruby 1.9.2 на Windows Server 2008 R2

Оригинал сообщенияЯ совершенно новый для Ruby, Rails и программирования. У меня есть приложение, которое должно будет аутентифицироваться на нашем сервере Active Directory, сохраняя список пользователей, отделенных от AD.

Я пытаюсь использовать Net-LDAP для установления соединения, поиска рекламы и загрузки пользователей, но я получаю 0 результатов с каждой попыткой запустить.

Я собрал это вместе на основе образцов, которые я видел, но когда я настраиваю его для своей компании, это, похоже, не работает. Любые идеи/критика наиболее приветствуются.

Благодарность!

Я установил это как метод в моей модели пользовательского класса:

class User < ActiveRecord::Base
  attr_accessible :username, :name, :email, :team, :office, :points_attributes
  validates_presence_of :username, :name, :email
  validates_uniqueness_of :username, :email
  has_one :points
  accepts_nested_attributes_for :points

  def self.import_all
  # initialization stuff. set bind_dn, bind_pass, ldap_host, base_dn and filter

  ldap = Net::LDAP.new(:host => "dc.mycompany.com", :port => 389)
  if ldap.bind(:method => :simple, :username => "username@mycompany.com", :password => "secret")
  else
    p ldap.get_operation_result
  end

  begin
  # Build the list
  filter = Net::LDAP::Filter.eq("displayName", "J*")
  attrs = ["givenName", "sn", "physicalDeliveryOfficeName", "sAMAccountName"]
  records = new_records = 0
  ldap.search(:base => "DC=mycompany,DC=com", :attributes => attrs, :filter =>  filter,  :return_result => false) do |entry|
    name = entry.givenName.to_s.strip + " " + entry.sn.to_s.strip
    username = entry.sAMAccountName.to_s.strip
    email = entry.sAMAccountName.to_s.strip + "@mycompany.com"
    office = entry.physicalDeliveryOfficeName.to_s.strip
    user = User.find_or_initialize_by_username :name => name, :username => username, :email => email, :office => office
    if user.new_record?
      user.save
      Points.find_or_create_by_user_id(user.id)
      new_records = new_records + 1
    else
      user.touch
    end
    records = records + 1
  end
  p ldap.get_operation_result

    logger.info( "LDAP Import Complete: " + Time.now.to_s )
    logger.info( "Total Records Processed: " + records.to_s )
    logger.info( "New Records: " + new_records.to_s )

    end

  end
end
Это было полезно?

Решение

Оказывается, что ошибка, которую я получаю, связана с некоторыми атрибутами, которые я ищу, не существующие на всех пользователях под деревом, на которое я смотрю.

Благодаря любому, что смотрело на это, но я считаю, что могу перейти к решению того, как обрабатывать записи без этих атрибутов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top