utilisateurs Chargement d'Active Directory dans un Rails 3.1 __gVirt_NP_NN_NNPS<__ base de données Active Record
-
25-10-2019 - |
Question
Mise à jour 11/30/11 J'ai fait quelques changements dans le code snippet où j'ai trouvé des erreurs. Je suis maintenant authentifiez avec succès à coup sûr, mais je reçois cette erreur après avoir essayé l'appel ldap.search:
<OpenStruct code = 1, message="Operations Error">
En utilisant Rails 3.1.0 et Ruby 1.9.2 sur Windows Server 2008 R2
Message original Je suis tout nouveau à Ruby, rails et programmation. J'ai une application qui devra authentifier sur notre serveur Active Directory, tout en maintenant une liste d'utilisateurs séparés de AD.
Je tente d'utiliser net-ldap pour établir la connexion, la recherche AD et charger les utilisateurs, mais je reçois 0 à chaque tentative d'exécution.
J'ai mis cela ensemble à partir d'échantillons que j'ai vu, mais quand je personnalise à ma compagnie, il ne semble pas fonctionner. Toutes les idées / critiques sont les bienvenus.
merci!
J'ai mis cela comme une méthode dans mon modèle de classe User:
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
La solution
Il se trouve que l'erreur que je reçois est dû à certains des attributs que je cherche ne pas exister sur tous les utilisateurs sous l'arbre que je regarde.
Merci à toutes celles qui regardait, mais je crois que je peux passer à la résolution de la façon de traiter les entrées sans ces attributs.