2010-09-30 17 views
38

Estoy tratando de que las Rutas personalizadas funcionen en mi aplicación Rails (Ruby 1.9.2 con Rails 3).Diseñar rutas personalizadas y páginas de inicio de sesión

Este es mi archivo 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 

Pero enviar el formulario de encendido/o de inicio de sesión/registro va a usuarios/sign_in y los usuarios/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. van a las rutas relevantes y no a las rutas predeterminadas generadas por Devise.

¿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 principal (índice de inicio) y no en los 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!

Respuesta

74

Con Diseñar 1.1.3 El siguiente debe funcionar

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

Las rutas que crea no se añade "/ usuario/... "porque el parámetro :path es una cadena vacía. El hash :pathnames se encargará de nombrar las rutas como lo desee.Idear utilizará estas rutas internamente para someter a/entrada funcionará como desee y no le llevará a/usuario/log_in

Para añadir un formulario de acceso a la primera página hay información en la Diseñar Wiki: http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

O hacer algo como esto:

<%= form_tag new_user_session_path do %> 
    <%= text_field_tag 'user[email]' %> 
    <%= password_field_tag 'user[password]' %> 
<%= submit_tag 'Login' %> 
+1

En el código que pone ": ruta", en el texto que dice ": as", corregido. – tokland

+7

aviso Devise 2.1.2 (versión posterior) utiliza el plural 'devise_for: users' – AJcodez

+0

Este enfoque funciona, pero está atascado utilizando los ayudantes de ruta predeterminados de Devise como' new_user_session_path'. Para obtener ayudantes como 'login_path', puedes poner el bloque' devise_for: user do' que OP tiene justo debajo de esta respuesta, y obtendrás lo mejor de ambos mundos. –

0

Utilice esta en la parte superior de su archivo routes.rb

map.connect "users/:action", :controller => 'users', :action => /[a-z]+/i 

utilizar esto en donde su archivo de índice es. si se trata del modelo de los usuarios, utilizar los anteriores o cambiar en consecuencia

+0

¿Funcionará por tener las páginas de inicio de sesión en la página principal. Residen en el índice de hogar #. Y idear (http://github.com/plataformatec/devise/) usa el modelo de usuario. –

+0

No funciona. El nombre de mi controlador es mi casa y no detecta la ruta/en la página de inicio. –

3

Sólo necesita no ponga su ruta especial en devise_for bloque

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 obras/inicio de sesión./users/sign_in también.

+2

No quiero que los usuarios/sign_in route trabajen. Solo quiero que las rutas personalizadas funcionen, y deben estar activas en todos los controladores y vistas que lo usan. –

1

he creado mi propio controlador de autenticación y se encaminan controlador de sesiones legado a mi controlador de

devise_for :users, 
:controllers => { 
    :sessions => 'auth' }, 

:path => '/', 

:path_names => { 
    :sign_in => 'login', 
    :sign_out => 'logout' } 

Este código se sumará/login y/cierre de sesión URLs.

Más información este se puede encontrar en el código fuente http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb

+0

La solución de Canthiswait funciona increíble, así que no intenté crear un nuevo controlador personalizado. –

+0

gr8 :) por supuesto no necesita la configuración del controlador: path_names es crucial – Vlada

5

Los siguientes trabajó para mí:

devise_for :users do 
    get "/login" => "devise/sessions#new" 
    get "/register" => "devise/registrations#new" 
    end 
1

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 
Cuestiones relacionadas