2016-07-11 5 views
0

Ich habe LDAP-Authentifizierung durch Devise, und bevor ich einen Benutzer in der Datenbank (mit den zusätzlichen Informationen aufgrund von Geschäftsregeln für den Benutzer) erstellen möchte, möchte ich einige andere Informationen auf den Servern des Unternehmens sammeln.Schienen 4 - Wie wird eine Validierungsaktion auf dem Controller richtig eingerichtet?

Ich habe eine user_query Aktion, so dass ich die folgenden modal anzeigen kann:

<div class="modal-dialog"> 
    <div class="modal-content"> 
    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal">&times;</button> 
     <h3>Find User by Email</h3> 
    </div> 
    <div class="modal-body"> 
     <% flash.each do |name, msg| -%> 
      <%= content_tag :div, msg, class: name %> 
     <% end -%> 
     <%= form_tag('/users/new', method: :get, remote: true) do -%> 
      <%= text_field_tag 'user_email', nil, placeholder: 'Insert user email', class: 'form-control' %> 
      <%= submit_tag 'Get user information', remote: true, class: 'btn btn-default' %> 
     <% end -%> 
    </div> 
    </div> 
</div> 

Es Box hat einen Text, in dem der Benutzer die E-Mail gibt den Server abzufragen und überprüfen, ob der Benutzer vorhanden ist, wenn es funktioniert , Umleiten an die new Benutzeraktion, Senden der gefundenen Benutzerinformationen, sonst möchte ich, dass es einen Fehler anzeigt, dass die informierte Benutzer-E-Mail nicht gefunden werden konnte.

Die Aktion, die ich diese Validierung tun erstellt, nachdem der Benutzer die email informiert hat, ist die authenticate_user_email wie folgt:

def authenticate_user_email 
    respond_to do |format| 
    if authenticated_user = Devise::LDAP::Adapter.get_ldap_entry(params[:user_email]) 
     format.html { redirect_to action: :new, authenticated_user: authenticated_user } 
    else 
     format.json { render json: 'User email not found', status: :not_found } 
    end 
    end 
end 

Allerdings konnte ich dies nicht die authenticate_user_email als after_action der Einstellung an die Arbeit user_query, noch weiß ich, ob dies der richtige Ansatz dafür ist, weshalb ich frage, was ist der richtige Weg, um diese Validierung einzurichten (unter Berücksichtigung, dass jede Aktion innerhalb eines Modals gerendert wird)?

Danke.

+0

Haben Sie sah [ Active Record Validierungen] (http: //guides.rub yonrails.org/v4.2/active_record_validations.html)? – lurker

+0

Ja, aber sind keine AR-Validierungen, um die Daten zu validieren, bevor sie in der Datenbank gespeichert werden? In diesem Fall würde es nicht wirklich Daten speichern, eher wie ein Schritt, um zu bestätigen, dass der Benutzer in der Firma existiert, und es dann aktivieren, um zusätzliche Informationen auf der Anwendungsseite zu erhalten (oder nicht). –

Antwort

0

Ändern der if Zustand in authenticate_user_email Methode von

authenticated_user = Devise::LDAP::Adapter.get_ldap_entry(params[:user_email])

zu

authenticated_user == Devise::LDAP::Adapter.get_ldap_entry(params[:user_email])

Auch haben einen Blick auf Active Record Validation als @lurker vorgeschlagen

+0

Die Bedingung überprüft nicht, ob der 'authenticated_user' gleich dem vom 'LDAP :: Adapter' gefundenen (oder nicht) Benutzer ist, überprüft aber gleichzeitig, ob der Benutzer vom' LDAP :: Adapter' gefunden wurde Zeit, dass es das Ergebnis der Variablen "authenticated_user" zuweist. –