ruby on rails - Diseñe rutas personalizadas y páginas de inicio de sesión
ruby-on-rails routing (6)
Estoy tratando de hacer que Custom Routes funcione en mi aplicación Rails (Ruby 1.9.2 con Rails 3).
Este es mi archivo config / route.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
Pero enviar el formulario en / login o / register va a los usuarios / sign_in y users / sign_up. ¿Cómo evito que esto suceda? O mejor aún, asegúrese de que, de forma predeterminada, todas las solicitudes de usuarios / sign_in, etc., vayan a las rutas relevantes y no a las rutas predeterminadas generadas por Devise.
Además, ¿cómo puedo hacer que el formulario de inicio de sesión sea parcial para incluirlo en cualquier controlador? ¿Para que pueda tener la página de inicio de sesión en la página de inicio (índice # de inicio) y no en usuarios / inicio de sesión?
Estoy usando Devise 1.1.3 con Rails 3 en Ruby 1.9.2, en Mac OSX Snow Leopard.
¡Gracias!
Con Devise 1.1.3 debería funcionar lo siguiente
devise_for :user, :path => '''', :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }
Las rutas que crea no se agregarán con "/ user / ..." porque el parámetro :path
es una cadena vacía. El hash :pathnames
se encargará de nombrar las rutas como desee. Devise utilizará estas rutas internamente, de modo que enviar a / login funcionará como desee y no lo llevará a / user / log_in
Para agregar un formulario de inicio de sesión a su página principal, hay información en Devise Wiki: http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app
O haz algo como esto:
<%= form_tag new_user_session_path do %>
<%= text_field_tag ''user[email]'' %>
<%= password_field_tag ''user[password]'' %>
<%= submit_tag ''Login'' %>
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'' }
Rutas:
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
Creé mi propio controlador de autenticación y enruté el controlador de sesiones de dispositivos a mi controlador
devise_for :users,
:controllers => {
:sessions => ''auth'' },
:path => ''/'',
:path_names => {
:sign_in => ''login'',
:sign_out => ''logout'' }
Este código agregará las URL de / login y / logout.
Más sobre esto puede encontrar en el código fuente http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb
Lo siguiente me funcionó:
devise_for :users do
get "/login" => "devise/sessions#new"
get "/register" => "devise/registrations#new"
end
Solo necesita no poner su ruta especial en el bloque de diseño
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
Ahora / login funciona. / users / sign_in también.
Use esto en la parte superior de su archivo route.rb
map.connect "users/:action", :controller => ''users'', :action => /[a-z]+/i
Usa esto en donde está tu archivo de índice. Si está en su modelo de usuario, use lo anterior o cambie en consecuencia