Rails 3 w / Devise: Comment définir deux pages d'accueil distinctes selon que l'utilisateur est authentifié ou non?

StackOverflow https://stackoverflow.com/questions/8888289

Question

J'utilise Rails 3 et Devise pour créer une application où les utilisateurs arrivent sur le site Web et voient apparaître une page d'accueil contenant un identifiant et un formulaire d'inscription.Cette page a son propre contrôleur ("page d'accueil") donc son itinéraire est

root :to => "homepage#index"

Je souhaite afficher une page d'accueil différente si les utilisateurs sont déjà connectés. Cela expliquerait que la racine pointe vers

root :to => "dashboard#index"

Existe-t-il un moyen d'avoir une route conditionnelle dans routes.rb, qui me permettrait de vérifier si l'utilisateur est authentifié avant de le router vers l'une de ces pages d'accueil?

J'ai essayé d'utiliser le code suivant mais si je ne suis pas connecté, l'appareil me demande de me connecter, donc clairement, seule la première route fonctionne.

authenticate :user do
  root :to => "dashboard#index"
end
  root :to => "homepage#index"

De plus, je souhaite que l'URL pointe vers www.example.com dans les deux cas, afin que www.example.com/dashboard/index et www.example.com/homepage/index n'apparaissent jamais dans le navigateur.p>

Merci mille fois !!!

Était-ce utile?

La solution

Essayez ceci, c'est spécifique à Warden / Devise.

root to: "dashboard#index", constraints: lambda { |r| r.env["warden"].authenticate? }
root to: "homepage#index"

Autres conseils

Dans votre HomeController:

def index
  if !user_signed_in?
    redirect_to :controller=>'dashboard', :action => 'index'
  end
end

(Réponses à la même question ici: https://stackoverflow.com/a/16233831/930038 . Ajout durépondez ici aussi pour la référence des autres.)

Dans votre routes.rb:

authenticated do
  root :to => 'dashboard#index'
end

root :to => 'homepage#index'

Cela garantira que root_url pour tous les utilisateurs authentifiés est dashboard#index

Pour votre référence: https://github.com/plataformatec/devise/pull/1147

Voici la bonne réponse avec les rails 4

root to: 'dashboard#index', constraints: -> (r) { r.env["warden"].authenticate? },
         as: :authenticated_root
root to: 'homepage#index'

J'ai essayé d'ajouter ceci à / modifier la réponse acceptée, mais c'est trop une modification pour être acceptée apparemment.Bref, votez pour la réponse acceptée (de Bradley), cela m'a aidé à trouver celle-ci :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top