73 votes

Définition de Devise Login sur la page racine

J'utilise le code suivant pour mes itinéraires:

   devise_for :user, 
    :as => '', 
    :path_names => { 
      :sign_in => "", 
      :sign_out => "logout", 
      :sign_up => "register" 
    }
 

Mais quand je suis déconnecté et que je vais /logout j'obtiens l'erreur suivante:

Aucune route ne correspond {: action => "new",: controller => "devise / sessions"}

Comment configurer le chemin racine pour qu'il soit sur :sign_in action?

110voto

Peter Nixey Points 4153

Pour faire suite aux personnes qui s’interrogent sur l’erreur Could not find devise mapping for path "/" il existe une solution de contournement.

Vous constaterez qu'il y a un indice dans vos journaux qui dira probablement:

 [Devise] Could not find devise mapping for path "/".
This may happen for two reasons:

1) You forgot to wrap your route inside the scope block. For example:

  devise_scope :user do
    match "/some/route" => "some_devise_controller"
  end

2) You are testing a Devise controller bypassing the router.
   If so, you can explicitly tell Devise which mapping to use:

   @request.env["devise.mapping"] = Devise.mappings[:user]
 

J'ai donc réessayé l'approche en l'enveloppant plutôt (comme @miccet le suggère) dans un bloc scope:

 devise_scope :user do
  root to: "devise/sessions#new"
end
 

CA marchait bien pour moi

80voto

VvDPzZ Points 1570
 devise_for :users

devise_scope :user do
  authenticated :user do
    root 'home#index', as: :authenticated_root
  end

  unauthenticated do
    root 'devise/sessions#new', as: :unauthenticated_root
  end
end
 

Juste comme ça, testé sur Rails Rails 4.1.0.rc1.

24voto

Logan Bailey Points 748
 root :to => "devise/sessions#new"
 

Je devais définir la racine de base par défaut. Je me sentais comme si j'avais essayé cela toute la nuit hier soir (avant de poser la question), mais ça fonctionne maintenant. Si vous êtes déconnecté, Devise essaie de vous rediriger vers le chemin racine que j'avais indéfini.

13voto

Gilles Points 37537

(Ceci a été posté en tant que modification suggérée , mais aurait dû être une réponse en soi. Je ne sais pas si cela a un sens ou non. Cher éditeur anonyme: n'hésitez pas à republier cette réponse comme la vôtre, et laissez-moi un commentaire. alors je vais supprimer cette copie.)

 root :to => redirect("/users/login")
 

3voto

miccet Points 703

Je suppose que vous avez différents rôles d'utilisateur. Si vous devez ajouter une étendue de ce type à la ressource users:

   devise_scope :user do
    get "/logout" => "devise/sessions#destroy"
  end
 

Vous pouvez en savoir plus sur le remplacement des itinéraires de conception ici: https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: