Caricamento utenti da Active Directory in un Rails 3.1 database di Active Record
-
25-10-2019 - |
Domanda
Aggiornamento 11/30/11 Ho fatto alcuni cambiamenti nel frammento di codice dove ho trovato errori. Ora sto autenticato con successo di sicuro, ma sto ottenendo questo errore dopo aver tentato la chiamata ldap.search:
<OpenStruct code = 1, message="Operations Error">
Utilizzo di Rails 3.1.0 e 1.9.2 rubino su Windows Server 2008 R2
Original Message Sono nuovo a Ruby, le rotaie e la programmazione di marca. Ho un'applicazione che dovrà autenticarsi al nostro server Active Directory, pur mantenendo una lista di utenti separati da AD.
Sto tentando di usare net-LDAP per stabilire la connessione, cercare dC e caricare gli utenti, ma ottengo 0 risultati ad ogni tentativo di eseguire.
Ho messo questo insieme sulla base di campioni che ho visto, ma quando ho personalizzarlo per la mia azienda, non sembra al lavoro. Tutte le idee / critiche sono i benvenuti.
grazie!
Ho impostato questo come un metodo nel mio modello di classe per l'utente:
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
Soluzione
Si scopre che l'errore che sto ottenendo è causa di alcuni degli attributi che sto cercando non esistente in tutti gli utenti sotto l'albero sto guardando.
Grazie a tutti quelli che hanno guardato questo, ma credo di poter andare avanti per risolvere come gestire le voci, senza quegli attributi.