2016-11-02 6 views
0

Ich habe den folgenden Code unter projects_controller.rbAuthentifizieren Benutzer in Controller und dann umleiten

class Admin::ProjectsController < ApplicationController 
before_filter :require_login 

def require_login 
    while (adminLogin != 'username') 
    redirect_to admin_login_path and return 
    end 
end 

Und diese unter application_controller.rb

class ApplicationController < ActionController::Base 

# Return the admin user 
def adminLogin 
    @email = params[:email] 
    @password = params[:password] 
    return @email 
end 
end 

Ich versuche, die E-Mail in dieser Form zu erhalten und es auf den Pass Projects Controller, wenn die E-Mail definiert ist, kann sich der Administrator anmelden. Wenn ich den Absenden-Button auf dem Formular drücke, kann ich die richtige E-Mail an den Projektcontroller senden, indem er <%= debug @email %> im Formular verwendet, aber die Seite umleitet nochmal anmelden. Wie kann ich dann zu/projekten gehen?

[UPDATE]:

application_controller.rb

class ApplicationController < ActionController::Base 
protect_from_forgery 

# Return the admin user 

def redirect_unless_admin 
@email = params[:email] 
password = params[:password] 
if (@email == 'username') 
    redirect_to admin_projects_path 
else 
    redirect_to admin_login_path 
end 

Ende Ende

und ich benötige diese Methode in meinem projects_controller.rb. Dies ist nur zu brechen, zu oft umleiten

Antwort

1

Sie sollten in application_controller mit diesem zu erhalten, indem der Lage sein:

class ApplicationController < ActionController::Base 
    def redirect_unless_admin 
    email = params[:email] 
    password = params[:password] 
    if params[:email].present? && email == 'username' 
     redirect_to admin_projects_path 
    else 
     redirect_to root_path 
    end 
    end 
end 

und dies in admin/projects_controller:

class Admin::ProjectsController < ApplicationController 
    before_filter :redirect_unless_admin 
end 

diese Weise die redirect_unless_admin Verfahren zu jedem Controller verfügbar ist, die application_controller erbt . Sie können die Logik beliebig anpassen, um herauszufinden, welche Umleitung zu verwenden ist, aber dies sollte ein guter Ausgangspunkt sein.

+0

Mit Ihrem genauen Code bekomme ich eine 'Die Website zu oft umgeleitet ', so dass ich nicht ganz sicher bin, ob das das Richtige ist. Wenn ich Ihre Methode zu diesem '@email =' Benutzernamen 'geändert habe: redirect_to (@email ==' Benutzername '? Admin_projects_path: admin_login_path) 'Es wird die richtige E-Mail und Routing zu'/admin/projects', aber dann stürzt es mit ab wieder zu oft Umleitung Fehler –

+0

Cool, gib es eine Chance. Vielleicht habe ich versucht, zu viel Phantasie zu bekommen. Wenn alles andere fehlschlägt, gehen Sie einfach mit einem guten alten if/else :) –

+0

Bitte beachten Sie meine Kommentar oben mit dem aktualisierten Code ^^^ –

1

Wenn Sie adminLogin von ProjectsController aufrufen müssen, sollte es entweder in ApplicationController oder in einer gemeinsamen übergeordneten Klasse definiert werden, die von ApplicationController abgeleitet ist.

+0

Also sollte ich diese Methode unter ApplicationController platzieren? –

+0

Bitte sehen Sie meine aktualisierte Frage ^^^ –

Verwandte Themen