2017-01-10 3 views
0

enthält Ich habe eine before_action :logged_in_user in meiner Steuerung, die an die login_path umleiten, wenn es keine current_user gibt.Einrichten der Abmeldung ... gibt es eine Möglichkeit zu überprüfen, ob eine Controlleraktion eine before_action

Ich habe mit der Logik zu kämpfen, wie Logout (zerstören Sie eine Sitzung) in meiner App einrichten.

Wenn ein Benutzer auf einer Seite ist, wo sie sind nicht erforderlich logged_in? sein, möchte ich die Abmelde nur redirect_to :back (bleiben Sie auf dieser Seite), da es nicht die aktuelle Seite Betrachtung wirkt sich.

Wenn sie auf einer Seite sind die, dass sie logged_in? sind erfordert, ich möchte, dass sie redirect_to :root_url, sein, weil sie sonst redirect_to die login_path sein, da sie nur logged_out umständlich ist.

Also im Grunde in Pseudo-Code möchte ich folgendes tun:

redirect_to :back 
    unless :back controller:action >> before_action :logged_in_user 
    then redirect_to root_url 

Antwort

0
SessionsController 

    def destroy 
    destroy_location 
    log_out if logged_in? 
    redirect_logout 
    end 

    def destroy_location 
    path = ["/feed", "/friends", "/saved_articles", "/favorites"] 
    if path.any?{|word| URI(request.referrer).path == word } 
     session[:exit] = root_url 
    end  
    end 

    def redirect_logout 
    redirect_to(session[:exit] || :back) 
    session.delete(:exit) 
    end 

Das funktioniert ziemlich gut!

Verwandte Themen