Laden von Benutzern aus Active Directory in eine Aktualisierungsdatenbank von Rails 3.1
-
25-10-2019 - |
Frage
Update 30.11.11 Ich habe einige Änderungen im Code -Snippet vorgenommen, bei denen ich Fehler gefunden habe. Ich authentifiziere mich jetzt mit Sicherheit erfolgreich, erhalte aber diesen Fehler, nachdem ich den Aufruf von LDAP.Search versucht habe:
<OpenStruct code = 1, message="Operations Error">
Verwenden Sie Rails 3.1.0 und Ruby 1.9.2 unter Windows Server 2008 R2
originale NachrichtIch bin brandneu in Ruby, Rails und Programmierung. Ich habe eine Anwendung, die sich mit unserem Active Directory -Server authentifizieren muss und gleichzeitig eine Liste von Benutzern beibehält, die von der Anzeige getrennt sind.
Ich versuche, Net-LDAP zu verwenden, um die Verbindung herzustellen, die Anzeige zu suchen und die Benutzer zu laden, aber ich erhalte 0 Ergebnisse bei jedem Ausführen.
Ich habe dies basierend auf Beispielen zusammengestellt, die ich gesehen habe, aber wenn ich es an mein Unternehmen anpassung anpege, scheint es nicht zu funktionieren. Alle Ideen/Kritikpunkte sind herzlich willkommen.
Danke!
Ich habe dies als Methode in meinem Benutzerklassenmodell festgelegt:
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
Lösung
Es stellt sich heraus, dass der Fehler, den ich bekomme, auf einige der Attribute zurückzuführen ist, nach denen ich suche, nach dem ich nicht auf allen Benutzern unter dem Baum vorhanden bin, den ich mir anschaue.
Vielen Dank an alle, die sich das angesehen haben, aber ich glaube, ich kann weitermachen, wie man mit Einträgen ohne diese Attribute umgeht.