2010-08-17 5 views
1

J'utilise le plugin d'authentification reposful pour authentifier les utilisateurs d'une application que je suis en train de créer. Comme dans la plupart des bons sites quand un utilisateur visite la page d'accueil, je veux afficher une page d'accueil standard et avoir la possibilité de se connecter ou de s'inscrire. Cependant, lorsqu'un utilisateur est connecté, je veux que l'URL racine du site (à savoir sitename.com) affiche un tableau de bord d'utilisateur au lieu de la page d'accueil standard. Je suppose que cela est simplement accompli en utilisant des fichiers de mise en page et en vérifiant si l'utilisateur est connecté_in? mais la logique semble me bousculer. Merci d'avance.Afficher différentes pages d'accueil basées sur l'état de connexion dans les rails

Répondre

2

Je le ferais comme suit: vous auriez votre contrôleur main auquel les utilisateurs non connectés peuvent accéder, puis un second contrôleur (appelons le admin/main) qui est la page principale pour les utilisateurs connectés.

Dans l'action index du contrôleur main (en supposant que vous souhaitez simplement rediriger l'action index, sinon, vous pouvez utiliser un before_filter):

class MainController < ApplicationController 
    def index 
    redirect_to :controller => 'admin/main', :action => 'index' and return if logged_in? 
    end 
end 

De cette façon, si un utilisateur connecté tente d'accéder l'URL racine de votre application, ils seront automatiquement redirigés vers la zone de connexion du site (mais l'URL ne changera pas).

0

Vous pouvez vérifier si l'utilisateur est déjà connecté lorsqu'il a atteint votre action de connexion et s'il est redirigé vers votre action de tableau de bord. Si ce n'est pas le cas, vous pouvez continuer à vous connecter normalement. Par exemple. dans vos sessions contrôleur

def new 
    if logged_in? 
    redirect_to :controller => 'dashboard', :action => 'index' 
    end 
end 

Vous pouvez aussi le faire dans un before_filter pour éviter « polluer » votre action de connexion. Par exemple.

before_filter :logged_in_users_go_to_dashboard, :only => [:create, :new] 

def logged_in_users_go_to_dashboard 
    redirect_to(:controller => 'dashboard', :action => 'index') if logged_in? 
end 
Questions connexes