J'essaie de faire fonctionner les itinéraires personnalisés dans mon Rails (Ruby 1.9.2 avec Rails 3).
Ceci est mon fichier config/routes.rb
match '/dashboard' => 'home#dashboard', :as => 'user_root'
devise_for :user do
get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in
get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out
get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations
end
Mais soumettre le formulaire sur/login ou/register va aux utilisateurs/sign_in et users/sign_up. Comment puis-je empêcher que cela se produise. Ou encore mieux, assurez-vous que par défaut, toutes les demandes d'utilisateurs/sign_in, etc. vont vers les routes pertinentes et non les routes par défaut générées par Devise.
Aussi, comment puis-je rendre le formulaire de connexion partiel pour l'inclure dans n'importe quel contrôleur? Pour que je puisse avoir la page de connexion sur la page d'accueil (home # index) et non sur users/sign_in?
J'utilise Devise 1.1.3 avec Rails 3 sur Ruby 1.9.2, sur Mac OSX Snow Leopard.
Merci!
Avec Devise 1.1.3, les éléments suivants devraient fonctionner
devise_for :user, :path => '', :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }
Les itinéraires qu'il crée ne seront pas ajoutés avec "/ user/..." en raison de :path
paramètre étant une chaîne vide. Le :pathnames
hash se chargera de nommer les routes comme vous le souhaitez. Devise utilisera ces routes en interne, donc soumettre à/login fonctionnera comme vous le souhaitez et ne vous amènera pas à/user/log_in
Pour ajouter un formulaire de connexion à votre page d'accueil, il y a des informations sur le wiki Devise: http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere -dans votre application
Ou faites quelque chose comme ça:
<%= form_tag new_user_session_path do %>
<%= text_field_tag 'user[email]' %>
<%= password_field_tag 'user[password]' %>
<%= submit_tag 'Login' %>
Vous avez juste besoin de ne pas mettre votre itinéraire spécial dans le bloc devise_for
match '/dashboard' => 'home#dashboard', :as => 'user_root'
get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in
get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out
get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations
devise_for :user
Maintenant/connexion fonctionne./users/sign_in aussi.
Config:
devise_scope :user do
get 'profile/edit' => 'devise/registrations#edit', :as => :edit_user_registration
get 'profile/cancel' => 'devise/registrations#cancel', :as => :cancel_user_registration
end
devise_for :users,
:path => '',
:path_names => { :sign_in => 'login',
:sign_out => 'logout',
:sign_up => '',
:registration => 'register',
:edit => 'edit',
:cancel => 'cancel',
:confirmation => 'verification' }
Itinéraires:
edit_user_registration GET /profile/edit(.:format) devise/registrations#edit
cancel_user_registration GET /profile/cancel(.:format) devise/registrations#cancel
new_user_session GET /login(.:format) devise/sessions#new
user_session POST /login(.:format) devise/sessions#create
destroy_user_session DELETE /logout(.:format) devise/sessions#destroy
user_password POST /password(.:format) devise/passwords#create
new_user_password GET /password/new(.:format) devise/passwords#new
edit_user_password GET /password/edit(.:format) devise/passwords#edit
PATCH /password(.:format) devise/passwords#update
PUT /password(.:format) devise/passwords#update
GET /register/cancel(.:format) registrations#cancel
user_registration POST /register(.:format) registrations#create
new_user_registration GET /register(.:format) registrations#new
GET /register/edit(.:format) registrations#edit
PATCH /register(.:format) registrations#update
PUT /register(.:format) registrations#update
DELETE /register(.:format) registrations#destroy
J'ai créé mon propre contrôleur d'authentification et acheminé le contrôleur de sessions de conception vers mon contrôleur
devise_for :users,
:controllers => {
:sessions => 'auth' },
:path => '/',
:path_names => {
:sign_in => 'login',
:sign_out => 'logout' }
Ce code ajoutera les URL/login et/logout.
Vous trouverez plus d'informations à ce sujet dans le code source http://github.com/plataformatec/devise/blob/master/lib/devise/Rails/routes.rb
Utilisez-le en haut de votre fichier routes.rb
map.connect "users/:action", :controller => 'users', :action => /[a-z]+/i
utilisez-le sur l'emplacement de votre fichier d'index. si c'est sur votre modèle d'utilisateur, utilisez ce qui précède ou modifiez en conséquence