2016-05-02 2 views
1

Ich habe eine Verbindung zu Active Directory über LDAP/net hergestellt. Ich versuche, AD Attribute und Werte zu ziehen.Encoding :: CompatibilityError in Beobachtungen beim Zugriff auf Active Directory von Schienen

Wenn ich den folgenden Code (mit values.inspect) verwenden, funktioniert die Abfrage.

<% @temp_search.each do |user| %> 
    TS = <%= user.sn %> <br> 
    <% user.each do |attribute, values| %> 
     <%= attribute %> <br> 
     <% values.each do |value| %> 
      <%= value.inspect %><br> 
     <% end %> 
     <hr style="border-color: red"> 
    <% end %> 
<% end %> 

Der Teil meiner Controller die LDAP-Abfrage zu tun ist s

filter = Net::LDAP::Filter.eq("sn", "mendla") 
    treebase = "dc=ccttapes1,dc=com" 
    @temp_search = ldap.search(:base => treebase, :filter => filter) 
    p ldap.get_operation_result 

Was kann ich nicht auf scheinen, ist nur den Wert für ein bestimmtes Attribut zu erhalten - zum Beispiel, given.

Ich sehe Ergebnisse wie

cn 
"Chris G. Mendla" 
sn 
"Mendla" 
description 
"Test account 1 for rails apps - DO NOT CHANGE PW" 
givenname 
"Chris" 
initials 
"G" 
distinguishedname 
"CN=Chris G. Mendla,OU=Users CCT,DC=CCTTAPES1,DC=com" 

Wenn ich jedoch <%= value.inspect %><br>-<%= value.givenname %><br> ich einen Fehler von

NoMethodError in Observations#index 
Showing C:/Users/cmendla/RubymineProjects/employee_observations/app/views/observations/index.html.erb where line #61 raised: 

undefined method `givenname' for "CN=Christopher Mendla,OU=Users CCT,DC=CCTTAPES1,DC=com":Net::BER::BerIdentifiedString 
Rails.root: C:/Users/cmendla/RubymineProjects/employee_observations 

Application Trace | Framework Trace | Full Trace 
app/views/observations/index.html.erb:61:in `block (3 levels) in _app_views_observations_index_html_erb__474218211_78240600' 
app/views/observations/index.html.erb:60:in `each' 
app/views/observations/index.html.erb:60:in `block (2 levels) in _app_views_observations_index_html_erb__474218211_78240600' 
app/views/observations/index.html.erb:58:in `block in _app_views_observations_index_html_erb__474218211_78240600' 
app/views/observations/index.html.erb:56:in `each' 
app/views/observations/index.html.erb:56:in `_app_views_observations_index_html_erb__474218211_78240600' 

erhalten ändern und wenn ich versuche, `` <% = givenname.value%> `Ich bekomme

NameError in Observations#index 
Showing C:/Users/cmendla/RubymineProjects/employee_observations/app/views/observations/index.html.erb where line #61 raised: 

undefined local variable or method `givenname' for #<#<Class:0x9cd0230>:0x9fadaf0> 
Rails.root: C:/Users/cmendla/RubymineProjects/employee_observations 

Application Trace | Framework Trace | Full Trace 
app/views/observations/index.html.erb:61:in `block (3 levels) in _app_views_observations_index_html_erb__474218211_83715540' 
app/views/observations/index.html.erb:60:in `each' 
app/views/observations/index.html.erb:60:in `block (2 levels) in _app_views_observations_index_html_erb__474218211_83715540' 
app/views/observations/index.html.erb:58:in `block in _app_views_observations_index_html_erb__474218211_83715540' 
app/views/observations/index.html.erb:56:in `each' 
app/views/observations/index.html.erb:56:in `_app_views_observations_index_html_erb__474218211_83715540' 
Request 

Mein Ziel ist es, in der Lage sein, für eine AD r suchen Zeichne mit Vor- und Nachnamen auf und ziehe Werte für Attribute wie mail oder memberof.

(Ich bin mit ldap-net

Antwort

2

In Ihrem Beispiel @temp_search sollte ein Array von Benutzern, die Ihre Suchkriterien erfüllen. Jede dieser Benutzer ist ein Net::LDAP::Entry Objekt. Auf diese Objekte können Sie Methoden aufrufen, stehen zur Verfügung entsprechend den Benutzer-Attribute

Wenn nur ein Benutzer zurückgegeben wird, wird nach wie vor das Net::LDAP::Entry Objekt innerhalb eines Arrays sein, wenden Sie sich so etwas wie nennen könnte:..

@temp_search.first.cn

Sie können auch anrufen:

@temp_search.first.attribute_names, um alle verfügbaren Attribute für dieses Objekt anzuzeigen.

Zum Beispiel könnten Sie so etwas wie:

<% @temp_search.each do |user| %> 
    #call user attributes 
    user.cn 
    user.memberof 
    #etc, other attributes 
<% end %>