Ruby 将用户从Active Directory加载到Rails 3.1活动记录数据库
2011年11月30日更新 我在发现错误的代码段中做了一些更改。我现在确实成功地进行了身份验证,但在尝试ldap.search调用后出现此错误:Ruby 将用户从Active Directory加载到Rails 3.1活动记录数据库,ruby,ruby-on-rails-3,ldap,netldap,Ruby,Ruby On Rails 3,Ldap,Netldap,2011年11月30日更新 我在发现错误的代码段中做了一些更改。我现在确实成功地进行了身份验证,但在尝试ldap.search调用后出现此错误: <OpenStruct code = 1, message="Operations Error"> 在Windows Server 2008 R2上使用Rails 3.1.0和ruby 1.9.2 原始消息 我是Ruby、rails和编程的新手。我有一个应用程序,它必须通过我们的Active Directory服务器的身份验证,同时维
<OpenStruct code = 1, message="Operations Error">
在Windows Server 2008 R2上使用Rails 3.1.0和ruby 1.9.2
原始消息
我是Ruby、rails和编程的新手。我有一个应用程序,它必须通过我们的Active Directory服务器的身份验证,同时维护一个与AD分离的用户列表
我正在尝试使用NetLDAP建立连接、搜索广告和加载用户,但每次尝试运行都会得到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
class用户dc.mycompany.com,:port=>389)
如果ldap.bind(:method=>:simple,:username=>)username@mycompany.com“,:password=>“secret”)
其他的
p ldap.get_操作_结果
结束
开始
#建立列表
filter=Net::LDAP::filter.eq(“displayName”、“J*”)
属性=[“givenName”、“sn”、“physicalDeliveryOfficeName”、“sAMAccountName”]
记录=新记录=0
搜索(:base=>“DC=mycompany,DC=com”,:attributes=>attrs,:filter=>filter,:return_result=>false)do |条目|
name=entry.givenName.to_.strip+“”+entry.sn.to_.strip
用户名=entry.sAMAccountName.to_.strip
email=entry.sAMAccountName.to_.strip+“@mycompany.com”
office=entry.physicalDeliveryOfficeName.to_.strip
user=user.find\u或通过以下方式初始化\u用户名:name=>name,:username=>username,:email=>email,:office=>office
如果是user.new_记录?
user.save
点。按用户id(user.id)查找或创建
新记录=新记录+1
其他的
用户触摸
结束
记录=记录+1
结束
p ldap.get_操作_结果
logger.info(“LDAP导入完成:+Time.now.to_s)
logger.info(“处理的总记录数:+Records.to_”)
logger.info(“新记录:+New_Records.to_s)
结束
结束
结束
事实证明,我得到的错误是由于我正在搜索的某些属性不存在于我正在查看的树下的所有用户上
多亏了大家的关注,但我相信我可以继续解决如何处理没有这些属性的条目。您使用的是哪个版本的ruby net ldap?我使用的是gem net ldap 0.2.2,它显然不同于ruby net ldap。