2009-12-13 10 views

Antwort

16

Ich glaube, Sie fragen, wie man Lauf ein, bevor der Filter nur dann, wenn ein Benutzer angemeldet ist, gibt es keine eingebaute in semantischen für diese, aber es ist leicht genug, um inline:.

class SomeController < ApplicationController 
    before_filter :do_something 

    def do_something 
    if logged_in? 
     # the stuff you want to do 
    end 
    end 
end 
+0

Genau das, was ich brauchte. – s84

+0

Wurde es in Schienen 4 veraltet? – vishB

1

Wenn Sie eine restliche Authentifizierung verwenden, ist es nur before_filter :login_required. Wenn Sie Ihr eigenes Authentifizierungs-Framework verwenden, können Sie in application.rb eine Methode erstellen, die true zurückgibt, wenn der Benutzer angemeldet ist, oder andernfalls auf die Anmeldeseite umleitet.

18
before_filter :only_when_user_is_logged_in, :only => :the_action 

oder für mehrere

before_filter :only_when_user_is_logged_in, :only => [:the_action, :another_action] 

Auf der anderen Seite können Sie auch

+0

Dies ist das kanonische Muster, nach den Rails-Anleitungen: http://guides.rubyonrails.org/action_controller_overview.html#filters – clozach

2

eine :except => :this_action Option bieten Wenn Sie wirklich für jemand anderen als eingeloggte Benutzer die Ausführung nicht den before_filter wollen Ziehen Sie in Ihrem Authentifizierungsfilter die Verwendung von #skip_before_filter in Betracht. Wenn Sie zum Beispiel überprüfen, ob Benutzer in Ihrem Authentifizierungsfilter angemeldet sind, rufen Sie bei fehlgeschlagener Authentifizierung einfach skip_before_filter :filter_for_logged_in_users_only an.

Darüber hinaus können Sie einfach testen, ob der Benutzer angemeldet ist, bevor Sie den Filter nur für Mitglieder ausführen. Zum Beispiel:

def filter_for_logged_in_users_only 
    return true unless current_user && logged_in? 
    #rest of the logic 
end 
+0

gute Sachen. Danke – s84

11

Bevor Filter nehmen einen optionalen Block, der die aktuelle Controller-Instanz übergeben wird so könnte man so etwas tun:

before_filter :do_stuff, lambda { |controller| controller.logged_in? } 
0
class LoginsController < ApplicationController 

    skip_before_filter :require_login, :only => [:new, :create] 

end 
+0

Hoppla,
,   im Controller. Vielleicht benutzen Sie Ihren eigenen neuen erfundenen Editor. – Rubyist