Mit Ruby on Rails, ich möchte, bevor eine Aktion auswählen, aber nur, wenn Benutzer angemeldetRuby on Rails: before_filter =>: only_when_user_is_logged_in
Wie ist das möglich.?
Mit Ruby on Rails, ich möchte, bevor eine Aktion auswählen, aber nur, wenn Benutzer angemeldetRuby on Rails: before_filter =>: only_when_user_is_logged_in
Wie ist das möglich.?
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
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.
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
Dies ist das kanonische Muster, nach den Rails-Anleitungen: http://guides.rubyonrails.org/action_controller_overview.html#filters – clozach
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
gute Sachen. Danke – s84
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? }
class LoginsController < ApplicationController
skip_before_filter :require_login, :only => [:new, :create]
end
Hoppla,
, im Controller. Vielleicht benutzen Sie Ihren eigenen neuen erfundenen Editor. –
Rubyist
Warum gibt es immer noch ein Kopfgeld auf diese Frage. Ah, das ist jetzt so noob für mich! – s84