2013-07-23 5 views
4

Mon site Web devrait fonctionner comme facebook.com. Si l'utilisateur est connecté et s'il passe à "/" il doit être rendu contrôleur. Si ce n'est pas connecté, il devrait être rendu page_destination contrôleurRails routage page d'acheminement et concevoir

"/" & & user_signed_in? --->contrôleur maison

"/" & & user_not_logged --->page_destination contrôleur

J'utilise Rails 4 et Concevoir

ApplicationController

class ApplicationController < ActionController::Base 

    before_filter :authenticate_user! 
end 

routes.rb

get "landing_page/index" 

root 'home#index', :as => :home 

Comment je pouvais garder un "before_filter" dans ApplicationControl qui fonctionnent dans tous les contrôleurs sauf contrôleur "page_destination"?

Mise à jour

Si je vais à «/en/page_destination » il rend contrôleur page_destination correctement (déconnecté), mais si je vais à «/» il me rediriger vers «/utilisateurs/sign_in »

class LandingPageController < ApplicationController 
    skip_before_action :authenticate_user! 

    def index 
    end 

end 

class ApplicationController < ActionController::Base 

    before_action :authenticate_user! 

end 

routes.rb

root 'landing_page#index' 

Répondre

7

RÉSOLU!

LandingPageController

class LandingPageController < ApplicationController 
    skip_before_action :authenticate_user! 

    def index 
    end 

end 

HomeController

class HomeController < ApplicationController 
    skip_before_action :authenticate_user! 
    before_action :check_auth 

def check_auth 
    unless user_signed_in? 
     redirect_to :controller => :landing_page 
    end 
end 
end 

ApplicationController

class ApplicationController < ActionController::Base 

    before_action :authenticate_user! 

end 

Routes.rb

root 'landing_page#index' 
+0

Cela ne signifie-t-il pas que, que vous soyez connecté ou non, la page de destination sera toujours affichée si vous essayez d'accéder à '/'? N'avez-vous pas voulu définir la racine à HomeController # index (ou quelque chose d'autre qui serait alors check_auth) – rpbaltazar

0

Je pense que vous pouvez facilement ajouter un avant filtre pour gérer cette action.

Comme dans cette answer

+0

nope. Il me redirige toujours vers/users/sign_in si je vais à "/". Question mise à jour – sparkle

0

Je pense que vous pouvez écrire l'action de la fonction confirm_logged_in dans le contrôleur

before_filter: confirm_logged_in

Dans cette fonction, vous pouvez mentionner la façon dont vous voulez afficher les pages en fonction de connecté utilisateur

def confirm_logged_in<br> 
    unless session[:user_id] 
    flash[:notice] = 'Please log in.' 
    redirect_to(:controller => 'access', :action => 'login') 
    return false #halts the before_filter< 

else 
return true 
    end 
end